Overview
A calm, ceremonial HTML template for tea houses, tea rooms and loose-leaf tea merchants. Chanoya ships three home pages, a light and a dark theme, right-to-left support, and tea house logic that is worked out rather than typed in: ceremonies with sessions and the seats left in each, loose leaf priced by the tin, a brewing guide with an infusion counter for every tea, a tea finder that ranks teas by flavour notes, the tea house’s live open status and a shop with a bag, coupon, shipping and tax.
What’s included
- 3 home pages, each with its own scroll moment: Hanging Scroll (a kakejiku painting unrolls downward with the section), Terrace Mist (banks of mist part over the tea terraces) and Flavour Wheel (the wheel turns to each tea’s leading note as its card passes)
- 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 — Terrace Mist drifting over faint terrace lines in the night bands and page titles, and a tea bowl cut from paper layers turning in the footer — tinted by the theme colours
- Ceremonies and tastings: 4 ceremonies, sessions per day with the seats left in each, today’s sessions live, and a four-step booking wizard
- Loose leaf by weight: every tea in 25, 50 and 100 g tins with its own price and price per 100 g, on the cards, the product page and in the bag
- Brewing guide for every tea: water in °C or °F, grams scaled to your vessel, the steep of each infusion, and an infusion counter that times them
- Tea finder: eight flavour notes on a flavour wheel; every tea ranked by how closely it matches, with type and caffeine filters
- The shop: type, price, sort and search, product page, bag, coupon, free-shipping meter, tax, checkout with an order number, wishlist
- Tea masters, story, gallery with filters, menu, origins, journal with search, FAQ with search, account pages, coming soon, 404
- Bowl Turn preloader, Leaf Settle reveals with brush rules, a red seal pressed into cards on hover, Swiper sliders and Fancybox popups
- Fully responsive, light and dark, zero console errors
Getting Started
Thank you for choosing Chanoya. Follow the steps below to get your site live.
1. Open locally
Unzip the downloaded package and open chanoya/index.html in any modern browser (Chrome, Firefox, Edge,
Safari). No build tools or server are required — the booking, brewing guide, tea finder and shop all work straight
from the files.
2. Deploy to a server
Upload the contents of the chanoya/ 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, teas, weights, brewing guides, flavour profiles, ceremonies, the
menu and the masters live in one place — see Tea House Logic.
assets/img/ with your own photography at the
same dimensions for the best result. Loose-leaf shots read best on the blush tile colour (--ch-tile).
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: Tea House (Hanging Scroll), Loose Leaf Merchant (Terrace Mist), Tea Ceremonies (Flavour Wheel) |
about.html / our-story.html | The tea house, its values, figures and specialists; a year-by-year story |
tea-masters.html / tea-master-details.html | The tea masters with the ceremony each hosts; a master’s profile with her teas |
gallery.html / visit-us.html / faq.html | The gallery with filters; the rooms, hours and map; questions by topic with search |
ceremonies.html / ceremony-details.html | Today’s sessions live and the four ceremonies with seats left; one ceremony with its week of sessions and teas |
book-a-ceremony.html | The four-step booking wizard: ceremony, day and session with seats left, guests and details, confirm |
tea-menu.html | The tea house menu on the base’s leader lines, with the opening hours |
tea-finder.html / brewing-guide.html / tea-origins.html | The tea finder by flavour notes; the brewing guide with its infusion counter and chart; the gardens |
shop.html / product-single.html / cart.html / checkout.html / wishlist.html | Loose leaf by weight: type, price, sort and search, product with tins and brewing guide, bag, checkout, wishlist |
blog.html / blog-details.html | The tea journal with search and six post formats; an article with reading time, share and comments |
contact.html | Contact cards with the live status, the week’s hours, map and the contact form |
login.html / register.html / forgot-password.html | Account pages |
coming-soon.html / 404.html | Countdown to the garden tea room’s opening, 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 (32 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 chanoya/, the template.
Every page sits in the template’s root; everything the pages load sits under assets/:
chanoya/
├── *.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 (32 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
├── banner/ 13 files
├── blog/ 8 files
├── decor/ 10 files
├── faces/ 8 files
├── flags/ 6 files
├── gallery/ 12 files
├── home/ 9 files
├── icons/ 42 files
├── logo/ 6 files
├── menu/ 3 files
├── products/ 24 files
├── team/ 5 files
└── textures/ 1 files
To publish the site, upload the contents of chanoya/ 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
--ch-green-rgb) — change both together.
--ch-sage--ch-sage-text--ch-ink--ch-seal--ch-clay--ch-bamboo--ch-bg--ch-blush--ch-tile--ch-night--ch-heading--ch-textSage fills the buttons, the weight switches and the footer, with olive ink type on it; olive ink is the heading colour and
the night bands; the blush panels and leaf tiles come from the photographs; the red of the tea-house seal marks the hover
accent, the seats-left alerts and the focus ring. --ch-bg, --ch-surface, --ch-blush,
--ch-heading and --ch-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: Cormorant Garamond (headings, prices and figures)
and Spectral (body, navigation, buttons and labels). Swap them by editing the Google Fonts link and the
--ch-ff-head / --ch-ff-body variables.
Logo
The logo is CHANOYA in light condensed capitals with “tea house” written across its foot. A tea bowl (chawan)
mark and a red tea-house seal go with it. They ship as ready-made PNG files in assets/img/logo/:
logo.png— for light grounds: the headers and the footerlogo-light.png— for dark grounds and dark modebowl-body.png,bowl-leaf.png— the preloader’s bowl and the leaf that travels round itseal.png— the tea-house seal pressed into cards on hover and set on photographsfavicon.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
chanoya-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.
--ch-bg--ch-surface--ch-blush--ch-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 hanging scroll band, the today board band, the finder band, the booking summary) are olive night in both themes. A light card placed inside one takesch-on-lightto keep its own ink. The sage footer (ch-sage-band) turns deep sage in dark mode. - Illustrated icons and paper branches — each ships in a light-ground and a dark-ground version; 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 House Logic
The figures on every page come from one data block, JS block 09 Tea House Data near the
top of main.js (var TEA). Edit it once and the cards, prices, guides, sessions and totals follow.
Prices are in US dollars; times are minutes after midnight (600 = 10:00 am); temperatures are °C.
hours | The tea house’s opening and closing time for each weekday (0 = Sunday); null closes the day (Monday in the demo). The open-now lines and every hours list read it. |
notes | The flavour wheel’s eight notes, in the order every tea’s profile uses, with their colours and icons. |
weights / teas | The three tin sizes (25, 50, 100 g) and every tea: type, origin, prices for each tin, caffeine, photos, its brew guide (c water °C, g grams per 100 ml, s first steep in seconds, add seconds each later infusion adds, n infusions, vessel) and its profile (0–5 on each note). |
ceremonies / bookAhead | Each ceremony’s weekdays, sessions per day, seats per session, minutes, price per guest, room, host and the teas poured; and how many days ahead it can be booked (21). |
menu | The tea house menu by category, on the leader lines of the home pages and the menu page. |
team / origins | The tea masters and the gardens the leaf comes from. |
shop | Free shipping from $50, otherwise $6 (express $14), tax 7%, coupon CHANOYA10 for 10% off. |
Loose leaf by weight
A bag line is a tea and a tin size, so the same tea can sit in the bag twice. The weight switch on a card and the tin choice on the product page repaint the price, the price per 100 g and the saving against the smallest tin.
Ceremony sessions and seats
Each ceremony runs on its weekdays at its sessions. The seats already taken come from a steady ledger keyed on the
ceremony, the date and the session, so a session shows the same seats left on every card, the week list, the today board
and in the wizard — replace seatsTaken() (block 23 Ceremony Schedule)
with your own bookings. Sold-out and started sessions cannot be booked; guests cannot exceed the seats left. Continue never
blocks; Confirm checks the details and gives a reference made from the date.
The brewing guide and infusion counter
The leaf is weighed for the vessel you set (grams per 100 ml times the millilitres), the water reads in °C or °F, and every infusion’s steep is the first steep plus the added seconds for each one before it. The counter times the steep of the infusion you are on, then steps on until the leaf is spent.
The tea finder
The notes you choose make a vector of ones on the wheel’s eight notes; every tea’s profile is compared with it by cosine similarity, shown as a match per cent, and the teas are ranked by it.
How the shop totals
CHANOYA10: $47.00 − $4.70, shipping
$6.00, tax $2.96 — $51.26.The bag, the wishlist and the applied coupon 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 27 Tea Shop)
to []. Checkout and the ceremony booking confirm on screen with a reference — connect them to your own
systems to take real orders.
WebGL Layers
Two small WebGL shaders draw the moving layers: the mist — faint contour lines of tea terraces following the hills, with banks of mist drifting across them at their own heights and speeds, in the night bands, the page titles, coming soon and the 404 — and the bowl — the footer’s brand object, a tea bowl cut from paper layers (a pale moon behind, the clay body, two glazes with dripping edges, the lip and the tea), each layer casting a soft shadow on the one below and shifting with depth as the bowl turns slowly. Each is one canvas:
<canvas class="ch-gl" data-gl="mist" 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)
Chanoya 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) beside the light / dark
switch lists the languages that read left to right and right to left. Choosing Arabic stores the language and the
direction (keys chanoya-lang and chanoya-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: sliders and every move that must mirror follow it
on their own. Clock-like figures (the infusion counter, session times) keep reading 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 (after
RTL fixes) keep what must not mirror. If you change style.css, regenerate the twin with
npx rtlcss style.css style.rtl.css and copy the RTL fixes block back to its end.JavaScript Guide
All custom behaviour lives in assets/js/main.js, wrapped in a jQuery IIFE and organised into 32 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 Bowl Turn preloader, the header, the Leaf Settle reveals and brush rules, the theme and direction switch and the WebGL layers.
- 09–10 — Tea House Data, Tea House Clock. Tea House Data holds every figure; the clock works out the tea house’s open status.
- 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, search, newsletter, choice cards.
- 20–22 — Hanging Scroll, Terrace Mist, Flavour Wheel. The three home pages’ scroll moments; the flavour wheel also draws the tea finder’s wheel.
- 23–32 — Ceremony Schedule, Brewing Guide & Infusion Counter, Tea Finder, Contact Form, Tea Shop, Account Forms, Article Tools, Launch Countdown, Ceremony Booking, FAQ Search. The feature pages: ceremony sessions and seats left, the brewing guide and its infusion counter, the tea finder, contact, the shop by weight, accounts, the article tools, the countdown, ceremony booking 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 and the scrubbed scenes rest in place.
ch-settle to a photo or card so it sinks into place with a slight
sway, ch-rise to text so it rises softly, and ch-brush for the ink-brush rule painted on under a
title. data-delay="0.2" staggers any of them; cards in a row stagger and lean opposite ways on their own. Add
ch-seal-host to a card so the tea-house seal presses into its corner on hover..mist-layer out to its data-dir side at its
data-depth; the Flavour Wheel turns to each [data-wheel-tea] card’s leading note as it
crosses the middle. 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/banner/ | Wide heroes, page-title banners and photo bands — 13 files: 2809×906, 2818×1268, 2809×797, 2809×1609, 2811×1597, 3738×633 |
img/blog/ | Journal posts and tea-table photographs — 8 files: 1376×990, 970×698, 1259×740 |
img/decor/ | Chanoya's own paper tea branches, the brush rule and the mist banks (transparent PNG, included) — 10 files: 1200×900, 520×44, 2400×420 |
img/faces/ | Round portraits for bylines, reviews and avatar groups — 8 files: 200×200 |
img/flags/ | The language picker’s flags (SVG, included) — 6 files: SVG |
img/gallery/ | Tea house photographs: rooms, ceremonies, leaf, gardens — 12 files: 800×658, 1382×1136, 600×600, 1379×1379, 1129×1129, 1036×1036, … |
img/home/ | Home and inner page photos — 9 files: 1233×779, 1197×829, 1426×2138, 1364×2046, 800×960, 1379×871, … |
img/icons/ | Illustrated line icons on a blob wash, each in an olive and an ivory ink (included) — 42 files: 128×128 |
img/logo/ | Logo, light logo, the preloader's bowl and leaf, the tea-house seal and favicon (included) — 6 files: 300×239, 112×64, 64×64, 488×112, 487×112, 224×224 |
img/menu/ | Home previews in the mega menu — 3 files: 560×350 |
img/products/ | Loose-leaf tea shots on the blush ground — 24 files: 800×1091, 600×778 |
img/team/ | The tea masters — 5 files: 412×416, 412×429, 680×686, 414×416, 412×419 |
img/textures/ | The rice-paper fibre of the preloader screens and the hanging scroll (included) — 1 file: 512×512 |
The logo files and seal, the illustrated icons, the paper tea branches, the brush rule, the mist banks, the rice-paper texture 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, ceremony booking, quick book,
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: Cormorant Garamond, Spectral
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 popups.
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.