Overview

Decanta template home pages

A convivial, papery HTML template for a wine and spirits members’ club: three membership tiers with a case every month, members’ prices in the cellar and tastings included, members’ tastings with seats, wine trips with places, and the members’ cellar shop. Decanta ships three home pages, a light and a dark theme, right-to-left support, and logic that is worked out rather than typed in: open now in the club room, the next tasting with seats, every tasting’s and trip’s dates from repeat rules, every price repainted for the visitor’s tier, an estimator that sets each tier against buying as a guest, seat booking, trip requests with a deposit, a four-step application and gift memberships.

What’s included

  • 3 home pages, each with its own scroll moment: postcards from the trip regions turn over one by one, bottles slide out of the cellar rack’s slots, and a tasting flight of five glasses lines up with their names
  • 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 — Wine Stain Rings blooming on the paper bands, and the footer’s members’ invitation card that bends like paper as it turns — tinted by the theme colours
  • Membership tiers with monthly or yearly billing, a comparison table and a savings estimator; a four-step application with an age check; gift memberships
  • Members’ tastings from repeat rules with filters and search; seat booking that includes your seat while your tier’s tastings last and counts guest passes
  • Wine trips with a finder; a trip request with the members’ price, single rooms and the deposit
  • The members’ cellar: a tier switch that repaints every price, categories, price filter, sort and search, product page, bag, coupon, free-shipping meter, tax, checkout with an order number, wishlist
  • The club room’s hours with open now, wines by the glass at members’ prices, an age gate remembered per browser
  • Sommeliers and a profile, gallery, journal, FAQ with search, account pages, coming soon, 404
  • Invitation preloader, Postcard Stack reveals with word-by-word titles, the glass-ring hover, Swiper sliders and Fancybox video popups
  • Fully responsive, zero console errors
📄 30 HTML files

Getting Started

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

1. Open locally

Unzip the downloaded package and open decanta/index.html in any modern browser (Chrome, Firefox, Edge, Safari). No build tools or server are required — the tiers, the estimator, the application, the tastings, the trips and the cellar shop all work straight from the files.

2. Deploy to a server

Upload the contents of the decanta/ 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, tiers, tastings, trips, the cellar and the shop rules live in one place — see Club Logic.

Tip: Replace the neutral placeholder images in assets/img/ with your own photography at the same dimensions for the best result. The bottles in img/wines/ and the glasses in img/decor/ are Decanta’s own transparent PNGs and ship with the template; replace them with your own packshots at the same size.

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 Club (postcards from the trips), The Club Room (the cellar rack), Cellar & Trips (the tasting flight)
about.htmlOur story: the club’s years line, the film, the figures, the sommeliers, members’ voices
membership.htmlThe three tiers with monthly / yearly billing, the comparison table, the estimator, the case styles, questions
join.htmlFour-step application: tier and billing, the case, delivery, details (21 or over), with the summary beside it
gift-membership.htmlA gift membership: tier, three to twelve months, the card and the day it arrives, priced as you choose
club-room.htmlThe club room: hours with open now, the rooms, wines by the glass at members’ prices, house rules, map
team.html / team-details.htmlThe sommeliers; a sommelier profile with her tastings and picks
gallery.htmlPhotos with filter tabs and a lightbox
tastings.html / tasting-details.htmlMembers’ tastings by date with filters and search; one tasting with its flight, host and seat booking
trips.html / trip-details.htmlWine trips with a finder; one trip day by day with a request and its deposit
shop.html / product-details.html / cart.html / checkout.html / wishlist.htmlThe members’ cellar: tier prices, filters, sort and search, product, bag, checkout, wishlist
blog.html / blog-details.htmlThe journal with search; a post with reading time, share and comments
faq.htmlQuestions by topic with search
contact.htmlContact cards with live open status, map, hours and the contact form
account.html / login.html / register.html / forgot-password.htmlThe account (membership, cases, seats and trips, details) and the login pages
coming-soon.html / 404.htmlCountdown to the second club room, error page
sendmail.phpAJAX mail handler for the contact and comment forms (see Contact Form)
assets/css/style.cssAll custom styles, numbered Table of CSS (17 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 (35 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 decanta/, the template. Every page sits in the template’s root; everything the pages load sits under assets/:

decanta/
├── *.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 (35 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/                      10 files
        ├── blog/                        11 files
        ├── decor/                       19 files
        ├── faces/                       11 files
        ├── flags/                       6 files
        ├── home/                        15 files
        ├── icons/                       26 files
        ├── logo/                        5 files
        ├── menu/                        3 files
        ├── team/                        7 files
        ├── textures/                    3 files
        └── wines/                       24 files

To publish the site, upload the contents of decanta/ 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 --dc-copper-rgb) — change both together.

Copper--dc-copper
Copper Button--dc-copper-deep
Copper Ink--dc-accent-text
Claret--dc-claret
Night--dc-night
White Ground--dc-bg
Cream Paper--dc-cream
Bottle Tile--dc-tile
Ice Paper--dc-ice
Heading--dc-heading
Body--dc-text
Hairline--dc-line-2

White, cream paper and ice-blue paper carry the pages; copper draws the rules, rings, the seal, the icons and the buttons (the deeper copper button face carries white text), and copper ink is the colour of the italic lines under titles, prices and links. Night (claret-black) is the ground of the club-room home and one band per page; claret tints the wine-stain rings. --dc-bg, --dc-surface, --dc-cream, --dc-heading and --dc-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: Spectral SC (every heading, the navigation, buttons and labels in tracked small capitals) and Libre Caslon Text (body, the copper italic lines under titles, prices). Swap them by editing the Google Fonts link and the --dc-ff-display / --dc-ff-body variables.

Logo

The logo is a round copper seal — DECANTA · WINE & SPIRITS · MEMBERS’ CLUB round a line-drawn decanter — beside the DECANTA wordmark. It ships as ready-made PNG files in assets/img/logo/:

  • logo.png — for light grounds: the white headers and the boxed header
  • logo-light.png — for photos and night: the header over the hero, the club-room home, dark mode
  • seal.png / seal-light.png — the seal alone (the preloader’s invitation, the story stamp, the letter card, the bottle labels)
  • favicon.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 decanta-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.

Dark Ground--dc-bg
Dark Surface--dc-surface
Dark Paper--dc-cream
Dark Heading--dc-heading
  • Tokens — the dark values sit in one block, [data-theme="dark"] { … }, right after :root in style.css. Change a dark colour there.
  • Bands that stay night — sections with the class is-night (the club-room home, by the glass, the tasting flight, the reserve form) are claret-black in both themes. A light card placed inside one takes dc-on-light to keep its own ink.
  • Bottles — the cellar’s bottle tiles keep their cream ground in both themes, as the photographs do.
  • Illustrated icons — each icon ships in a copper and a light 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.

Club Logic

The figures on every page come from one data block, JS block 10 Club Data near the top of main.js (var DECANTA). Edit it once and the cards, tiers, dates, seats, places and totals follow. Prices are in US dollars; times are minutes after midnight (1110 = 6:30 pm); weekdays run 0 = Sunday to 6 = Saturday.

hoursThe club room and the cellar shop for each weekday ([] = closed; the club room rests on Monday). The top bar’s open-now line and every hours list read it.
tiers / yearlyMonths / bottleValueThe three tiers: monthly fee, bottles a month, the members’ price off the cellar, tastings included and guest passes a year, trip priority; a year costs 10 months; a case bottle is worth $36 at list.
styles / caseDay / giftThe case styles, the day the case ships (the first Thursday of the month) and the gift lengths and card fee.
tastings6 members’ tastings on the nth weekday of each month, with the start, length, seats, seats taken, members’ and guest prices, the host and the five glasses of the flight.
trips / deposit6 trips starting on the nth weekday of the month so many months ahead, with nights, places, places taken, members’ and guest prices per person, the single supplement, the stay and the days; a 30% deposit.
cats / productsThe cellar: 18 bottles in 8 kinds, with region, vintage, size and list price; the members’ price is worked out from the visitor’s tier.
glasses / glassOffWines by the glass in the club room and the members’ share off them.
accountThe demo member on the account pages: tier, tastings and guest passes used this year.
shopFree shipping from $150, otherwise $12 (express $24), tax 8%, coupon DECANTA10 for 10% off.

Members’ prices

The tier switch (on the cellar, the product, the bag and the home pages) keeps the visitor’s tier in the browser (decanta-tier) and repaints every price: a guest sees the list price, a member the list price less the tier’s share, to the whole dollar. The demo opens as a Reserve member.

The estimator

For a number of bottles a month, other cellar spending and tastings a year, each tier’s year is set against buying the same as a guest: the case covers its bottles, more bottles and the rest of the cellar come at the tier’s price, the tier’s tastings are included and further ones are at the members’ price.

Worked example: 4 bottles a month, $120 more in the cellar and 8 tastings, paying for the year: a guest spends $3,652; a Reserve member $2,374 — $1,278 saved.

Tastings and seats

Every tasting repeats on its weekday of the month (Old World Reds: the first Thursday), so its next dates are always ahead of the visitor. On the tasting page your own seat is included while your tier’s tastings last, guest passes bring a guest in at the members’ price and anyone else pays the guest price; booked seats are kept in the browser and count against the table.

Worked example: a Reserve member books 3 seats at Old World Reds: their seat is included (9 of 12 tastings left), one guest comes in on a pass at $35 and one at the guest price $55 — $90.

Trips

Worked example: two Collector members on Burgundy At Harvest in single rooms: $2,708 a person (the members’ price less 5%), plus $450 single supplement each — $6,316, of which the 30% deposit is $1,895.

Gift memberships

Worked example: a year of Collector with a printed card: twelve months for the price of ten plus the card — $1,896.

How the shop totals

Worked example: one Barolo at the Reserve price ($66.00); shipping $12.00 (under $150); tax 8% $5.28 — $83.28. With the coupon DECANTA10: $66.00 − $6.60, shipping $12.00, tax $4.75 — $76.15.

The bag, the wishlist, the coupon, the tier, the booked seats and the requested places 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; to start empty, set the two demo lists in doShop() (block 30 Members’ Cellar Shop) to []. Checkout, joining, gifts, seats and trip requests confirm on screen with a reference — connect them to your own systems to take real orders and bookings.

WebGL Layers

Two small WebGL shaders draw the moving layers: Wine Stain Rings — soft wine-glass rings that bloom, overlap and fade on the cream and ice paper bands and the night bands — and the Invitation Card — the members’ card in the footer, a grid mesh whose vertex shader bends it like paper as it turns. Each is one canvas:

<canvas class="dc-gl" data-gl="rings" 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-3 and --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)

Decanta 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 decanta-lang and decanta-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. Prices, dates and times keep reading left to right inside their rows.

Editing the styles: 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 35 numbered blocks (see the JS INDEX comment at the top of the file):

  • 01–09 — Preloader, Sticky Header, Offcanvas Menu, Chosen Tasting & Trip, Scroll Reveals, Back To Top, Anchor Scroll, Light & Dark Mode, Direction, WebGL Layers. The core every page shares: the Invitation preloader, the header, the chosen tasting / trip hand-over, the Postcard Stack and word reveals, the theme and direction switch and the WebGL layers.
  • 10–13 — Club Data, Club Clock, Custom Select, Age Gate. Club Data holds every figure; Club Clock works out open now, the next tasting, every tasting’s and trip’s dates and the seats and places left; the age gate.
  • 14–20 — Hero Sliders, Card Sliders, Accordion, Filter Tabs, Grid Search, Newsletter, Choice Cards. Shared components: sliders, accordions, filters, search, forms, choice cards.
  • 21–23 — Postcards From The Trips, The Cellar Rack, The Tasting Flight. The three home pages’ scroll moments.
  • 24–35 — Membership & Members' Prices, Join The Club, Gift A Membership, Members' Tastings, Wine Trips, Contact Form, Members' Cellar Shop, Account Forms, Article Tools, Demo Forms, Launch Countdown, FAQ Search. The feature pages: tiers and members’ prices, the estimator, joining, gifts, tastings and seats, trips and requests, the cellar shop, accounts, FAQ.

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.

Reveals: add dc-stack to a photo’s frame so it comes in as a fan of three postcards that gathers into one (Postcard Stack), dc-words to a title so its words rise one by one, dc-place to a card and dc-fade to text so they rise softly into place. data-delay="0.2" staggers any of them. Add dc-ringed to a card’s column for the glass-ring hover.
Scroll moments: the postcards turn over, the rack’s bottles slide out and the flight’s glasses land as their section travels up the screen; they only move forward, so what has turned stays turned. None of them pins the page, and each page is authored in the finished state.
Countdown: the coming-soon page counts down to 10:00 am on the next 20 March, the first day of spring — no date to update. Change it in 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/Page-title banners, hero slides and photo bands — 10 files: 2809×1504, 2809×1505, 2560×1042, 3464×1414, 3323×1353, 2809×1593
img/blog/Journal posts, trip and gallery photos — 11 files: 2818×1910, 1382×870, 1400×949, 2818×1902, 2017×1368
img/decor/The five tasting glasses, the drawn bottle strip and the glass-ring stain (transparent PNG, included) — 19 files: 120×372, 320×804, 300×300
img/faces/Round portraits for bylines, voices and avatar groups — 11 files: 240×240
img/flags/The language picker’s flags (SVG, included) — 6 files: SVG
img/home/Home and inner page photos — 15 files: 1100×816, 1100×952, 1100×1310, 1100×743, 2823×1325, 1827×1355, …
img/icons/Illustrated line icons, each in a copper and a light ink (included) — 26 files: 192×192
img/logo/Logo, light logo, seal and favicon (included) — 5 files: 453×120, 240×240, 64×64
img/menu/Home previews in the mega menu — 3 files: 560×350
img/team/Sommelier portraits — 7 files: 800×1063
img/textures/Cream paper, ice paper and night grain (included) — 3 files: 640×640, 720×720
img/wines/The cellar’s bottles with Decanta labels, standing and lying (transparent PNG, included) — 24 files: 400×1244, 622×200

The logo files, the illustrated icons, the bottles, the glasses, the language flags and the paper textures 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, application, gift, seat booking, trip request, checkout, account, 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, replace YOUR_RECAPTCHA_V3_SECRET_KEY with 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: Spectral SC, Libre Caslon Text

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.