Overview
A night-black, orange-edged HTML template for a performance and EV specialist: paint and wraps, protection film, tuning, EV service and detailing under one roof. Revolta ships three home pages, a light and a dark theme, right-to-left support, and logic that is worked out rather than typed in: a wrap and film quote from the car’s size, the film and the coverage, tuning stages with their power and torque gains for every model, an EV battery health estimate and a battery check booked into the EV bay’s free lifts, detailing priced by size, care plans monthly or yearly, and a shop of upgrades supplied or supplied and fitted.
What’s included
- 3 home pages, each with its own scroll moment: Performance & EV (one coupe takes six films in turn, each laid from the nose back as you scroll), Tuning & Dyno (the dyno bars climb from stock to stage 1, 2 and 3) and EV & Detailing Studio (the headlights flicker on, then the beam blazes up)
- A light theme by default with night bands, and a dark theme 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 — Track Lines, racing-line chevrons sliding along the edges of the night bands and page titles, and the footer’s V mark gliding through the studio band with a trail of echoes — tinted by the theme colours
- The wrap and paint-protection quote: 5 car sizes, 7 films, 6 coverages and extras → the price line by line, the days in the bay, the warranty, the deposit and a reference, with the coupe on the preview taking the chosen film
- The film library: 16 colours by finish and family, with search, each one handed to the quote
- Tuning stages for 8 models: stock and stage 1, 2 and 3 power and torque, the gains, power to weight, the days and what each stage fits, with a stage table and the next dyno day counting down
- EV battery health: the car, its age, miles, fast charging, climate and charge limit → state of health, usable kWh and range today; a five-step battery check booking with the EV bay’s free starts
- Detailing priced by size with a builder (package, add-ons, the hours and the ready day); four care plans monthly or yearly with what a plan saves
- The upgrades shop: categories, price filter, sort and search, the product page, supply or supply & fit, cart with a code, shipping and tax, checkout with an order number, wishlist
- The studio clock in every header (open now, or when it opens), today marked in every hours list and this week’s load in each bay
- Wrap Peel preloader, Spray Pass reveals (two spray-gun passes uncover each photo), word-rise titles and the wrap swatch on hover
- Builds with filters, the crew, a crew profile, the journal with post formats, FAQ with search, My Garage and the login pages, coming soon, 404
- Fully responsive, W3C-valid, zero console errors
Getting Started
Thank you for choosing Revolta. Follow the steps below to get your site live.
1. Open locally
Unzip the downloaded package and open revolta/index.html in any modern browser (Chrome, Firefox, Edge,
Safari). No build tools or server are required — the studio clock, the quote, the tuning stages, the battery estimate,
the booking wizard, the plans and the shop all work straight from the files.
2. Deploy to a server
Upload the contents of the revolta/ 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. The hours, films, coverages, models, batteries, packages, plans and shop
rules live in one place — see Studio Logic.
assets/img/ with your own photography at the
same dimensions for the best result. The layers in img/wrap/ and img/lamp/ are cut from one
photograph each — see Images.
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: Performance & EV (the wrap colour, swatch by swatch), Tuning & Dyno (the dyno bars climb) and EV & Detailing Studio (the headlights switch on) |
services.html / service-details.html | The five crafts, the process and where prices start; one service with its film quote and its questions |
wrap-quote.html | The wrap and paint-protection quote: size, film, colour, coverage and extras, with the coupe taking the film |
wrap-films.html | The film library: 16 colours by finish and family, with search |
tuning.html | Tuning stages for 8 models with the dyno chart and the stage table |
ev-service.html / ev-health-check.html | The battery health estimate and the four checks; the five-step battery check booking in the EV bay |
detailing.html | Detailing priced by size, with a builder for the package, the add-ons and the ready day |
care-plans.html | Four care plans monthly or yearly, with what a plan saves against paying visit by visit |
projects.html / project-details.html | The builds with filter tabs and search; one build with its film, its days and its gallery |
shop.html / product-single.html / cart.html / checkout.html / wishlist.html | The upgrades shop, supplied or supplied and fitted: filters, sort and search, the product, cart, checkout, wishlist |
about.html / team.html / team-details.html | The studio and its four bays; the crew; one technician’s profile |
faq.html | Questions by topic with search |
contact.html | Live open status, the contact form and the map |
blog.html / blog-details.html | The journal with its post formats and search; a post with reading time, share and comments |
account.html / login.html / register.html / forgot-password.html | My Garage (saved quotes, bookings, orders, details) and the login pages |
coming-soon.html / 404.html | Countdown to the second studio, error page |
sendmail.php | AJAX mail handler for the contact form (see Contact Form) |
assets/css/style.css | All custom styles, numbered Table of CSS (16 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 (38 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 revolta/, the template.
Every page sits in the template’s root; everything the pages load sits under assets/:
revolta/
├── *.html the 32 pages, all in the root (see File Structure)
├── sendmail.php the AJAX mail handler for the contact form
└── 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 (38 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/ 14 files
├── cars/ 12 files
├── faces/ 6 files
├── flags/ 6 files
├── lamp/ 3 files
├── logo/ 3 files
├── menu/ 3 files
├── parts/ 6 files
├── shop/ 15 files
├── team/ 5 files
├── work/ 13 files
└── wrap/ 3 files
To publish the site, upload the contents of revolta/ 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
--rv-orange-rgb) — change both together.
--rv-white--rv-grey--rv-orange--rv-orange-deep--rv-orange-ink--rv-night--rv-coal--rv-band--rv-panel--rv-steel--rv-text--rv-lineNight, coal, band and panel are the dark grounds — the heroes, the scroll moments, the footer and the cards on them;
steel is the face of the buttons, with an orange edge. White and title grey carry the light pages. Orange is the one
accent: the bars, the ticks, the corner squares, the menu’s top bar and the orange band; orange ink is the same orange
made dark enough for small text on white. --rv-bg, --rv-surface, --rv-grey,
--rv-heading and --rv-text are the semantic names the components use — the dark theme swaps
those (see Light & Dark Mode). The 16 wrap colours are content, not grounds: each is a
w- class (for example w-volt-orange) that sets --rv-wrap for its chip and its hover.
Fonts
Two Google Fonts are loaded in the head of each page: Oxanium (headings, labels, the navigation and the
buttons, in capitals) and Sarabun (body text and figures). Swap them by editing the Google Fonts link and the
--rv-ff-display / --rv-ff-body variables.
Logo
The logo is REVOLTA in wide capitals with the V as the mark: an orange chevron with a lightning cut through its left arm.
It ships as ready-made PNG files in assets/img/logo/:
logo.png— for light grounds: the white header and the light pageslogo-light.png— for dark grounds: the header over the heroes, the footer and the dark themefavicon.png— the browser tab icon
The preloader and the footer’s echo draw the V from its own paths in code (block 01 Preloader and block 08 WebGL Layers), so they need no image. 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
Revolta opens light: the white pages are the default and need no attribute, with night bands for the heroes and the scroll
moments. Every header (and the mobile menu) has a theme switch that turns the whole site dark. The choice is saved in the
browser under the key revolta-theme and applied by a one-line script in the <head> before the
page paints, so a dark visitor never sees a white flash. The switch sets data-theme="dark" on the
<html> tag.
--rv-bg--rv-surface--rv-heading--rv-text--rv-accent-text- 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 heroes, the wrap moment, the dyno chart, the headlights, the footer) are night in both themes;is-coalis the coal band andis-orangethe orange band. - 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.
Studio Logic
The figures on every page come from one data block, JS block 09 Revolta Data near the
top of main.js (var REVOLTA), and one set of rules, block
12 Studio Engines. Edit the data once and the hours, prices, gains, ranges and totals
follow. Prices are in US dollars, power in hp, torque in lb-ft and range in miles; times are minutes after midnight
(1080 = 6:00 pm); weekdays run 0 = Sunday to 6 = Saturday.
hours / closures | Opening and closing for each weekday (null = closed): Monday to Friday 8 am–6 pm, Saturday 9 am–3 pm, closed on Sunday, and the fixed closure dates (1 January, 4 July, 25 December). The open-now line, the hours lists and every booking read them. |
labourRate / deposit | The labour rate ($145 an hour, used to price fitting in the shop) and the deposit that holds the days in the bay (20% of a quote). |
sizes | The five car sizes and the factor every film and detailing price takes: Compact & Coupe ×1, Sedan & Fastback ×1.15, SUV & Crossover ×1.32, Large SUV & Pickup ×1.55, Supercar ×1.4. |
films / coverage / extras | The films with their full-body price, warranty, thickness and days; the coverages as a share of the full body (Full Body 100%, Track Pack 55%, Full Front 40%, Partial Front 22%, Roof & Mirrors 14%, Chrome Delete 12%); the extras (door shuts as a share of the film on a full body, the rest a compact price times the size). |
colours / wrapMoment | The 16 wrap colours with their finish, family and colour, and the six that Home 01’s moment lays in turn. |
models / dynoModel | The 8 models with stock power, torque and weight and three stages, each with its power, torque, price, days and what it fits; the model the homes open on. |
evs / fade / checks / evBay | The 10 EVs with gross and usable kWh, range and battery warranty (years, miles, the health it keeps); the fade rules of the estimate; the four checks; the EV bay (a start every 30 minutes, 2 lifts, booking 30 days ahead). |
detailing / addons / lamps | The six packages and four add-ons with their compact price and hours; headlight film and restoration. |
plans / payg / yearMonths | The four care plans by the month (Basic $59, Standard $119, Deluxe $169, Premium $229) with what each covers; the visit-by-visit prices they are compared with; a year costs 10 months. |
bays / dynoDay | Each bay’s load this week; the dyno day on the last Saturday of the month, 9 am–3 pm, 3 pulls for $149, 24 places. |
projects / services / team / reviews / posts | The builds, the five services, the crew, the drivers quoted and the journal. |
cats / products / shop | The shop: 9 upgrades in 4 categories, each with its hours on the lift when fitted; the code REVOLTA10 takes 10% off the parts, shipping is free from $500 of shipped parts (otherwise $25, express $60) and sales tax is 10.25% on the parts. |
Open now
Every element with data-open-status shows Open now, until 6 pm, Opens today at 8 am or
Closed now, opens Monday at 8 am, from the visitor’s own clock. Hours lists marked
data-hours-table mark today’s row; data-ev-next shows the EV bay’s next free start
and data-dyno-next the next dyno day.
How a wrap or film quote totals
The film’s full-body price × the coverage’s share × the size factor, plus the extras, rounded to $10. The days are the film’s days × the coverage’s plus the extras’, the deposit is 20% of the total and the warranty is the film’s.
| Gloss Colour Wrap | Full body $3,200, 5-year warranty, 3.2 mil, 4 days in the bay |
| Satin Colour Wrap | Full body $3,600, 5-year warranty, 3.2 mil, 4 days in the bay |
| Matte Colour Wrap | Full body $3,600, 4-year warranty, 3.2 mil, 4 days in the bay |
| Colour-Shift Wrap | Full body $5,400, 3-year warranty, 3.5 mil, 5 days in the bay |
| Clear PPF Gloss | Full body $6,200, 10-year warranty, 8 mil, 5 days in the bay, self-healing |
| Stealth PPF | Full body $6,900, 10-year warranty, 8 mil, 5 days in the bay, self-healing |
| Coloured PPF | Full body $8,400, 10-year warranty, 8.5 mil, 6 days in the bay, self-healing |
Tuning stages
Every model carries its stock figures and three stages; the cards show the gains over stock and power to weight in hp a US ton (2,000 lb).
| Volkswagen Golf R | Stock 315 hp / 295 lb-ft → stage 1 365 hp, $990 · stage 2 400 hp, $3,450 · stage 3 470 hp, $11,800 |
| BMW M340i | Stock 382 hp / 369 lb-ft → stage 1 450 hp, $1,190 · stage 2 490 hp, $3,900 · stage 3 560 hp, $12,900 |
| Audi RS 3 | Stock 401 hp / 369 lb-ft → stage 1 470 hp, $1,290 · stage 2 510 hp, $4,200 · stage 3 600 hp, $14,500 |
| Mercedes-AMG A 45 S | Stock 416 hp / 369 lb-ft → stage 1 470 hp, $1,290 · stage 2 500 hp, $4,400 · stage 3 560 hp, $13,200 |
| Toyota GR Supra | Stock 382 hp / 368 lb-ft → stage 1 450 hp, $1,090 · stage 2 500 hp, $3,800 · stage 3 590 hp, $12,400 |
| Porsche 911 Carrera S | Stock 443 hp / 390 lb-ft → stage 1 520 hp, $1,890 · stage 2 560 hp, $6,200 · stage 3 640 hp, $18,900 |
| Ford Mustang GT | Stock 480 hp / 415 lb-ft → stage 1 500 hp, $890 · stage 2 525 hp, $3,600 · stage 3 750 hp, $14,800 |
| Toyota GR Corolla | Stock 300 hp / 273 lb-ft → stage 1 330 hp, $890 · stage 2 360 hp, $3,200 · stage 3 430 hp, $10,900 |
The battery estimate
Calendar fade (quicker in the first years, then steady), the miles, the share of DC fast charging, the climate and the charge limit each take their part of the pack’s health; the result is shown with a ±1.5-point band, the usable kWh and the range today, and the margin over the health the battery warranty keeps.
Battery checks in the EV bay
| Quick SoH Scan | 30 minutes, $79 — State of health from the battery system, a printed report |
| Full Battery Health Report | 90 minutes, $189 — Cell balance, isolation test, thermal check, a DC charge test |
| Pre-Purchase EV Inspection | 120 minutes, $249 — The battery report, charge port, brakes, tyres, a road test |
| Charging & Cable Check | 30 minutes, $59 — Onboard charger, port, cable and wallbox handshake |
The wizard offers a start every 30 minutes that leaves a lift free for the whole check; taken lifts are seeded from the date, so every visitor sees the same picture, and closed days are off. Continue never blocks — only the last step checks the details — and the booking gets a code and is kept in My Garage.
Detailing and care plans
How the shop totals
Every upgrade can be supplied, or supplied and fitted at the studio: fitting is its hours on the lift × the labour rate. The code comes off the parts, tax is on the parts after the code, fitting is labour (not taxed and never shipped), and only supplied parts ship.
The cart, the wishlist, the code, the saved quotes, the battery-check bookings and an unfinished booking are kept in the
browser (localStorage), so they follow the visitor from page to page. The first visit starts with a small demo
cart and wishlist so every shop page has something to show; to start empty, set the two demo lists in doShop()
(block 32 Upgrades Shop) to []. Quotes, bookings, plans and checkout
confirm on screen with a reference — connect them to your own systems to take real bookings and payments.
WebGL Layers
Two small WebGL scenes draw the moving layers: Track Lines — racing-line chevrons sliding along two gently curving lines at the top and bottom edges of the night bands and page titles, one run each way, every few an orange one, the copy in the middle left clear — and the Echo Mark — the V mark gliding through the footer’s studio band, leaving a trail of echoes, each older, paler and cooler than the last. Each is one canvas:
<canvas class="rv-gl" data-gl="track" 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)
Revolta 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 or Hebrew stores the language and
the direction (keys revolta-lang and revolta-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, figures, the dyno chart and the cars of the scroll moments 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 38 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 Layers. The core every page shares: the Wrap Peel preloader, the header, the Spray Pass reveals, the theme and direction switch and the WebGL layers.
- 09–12 — Revolta Data, Studio Clock, Custom Select, Studio Engines. Revolta Data holds every figure; Studio Clock works out open now, today in the hours lists, the EV bay’s next free start, the next dyno day and this week’s load in every bay; Studio Engines is the arithmetic every page shares (the film quote, detailing, the tuning stages and the battery estimate).
- 13–20 — Hero Sliders, Card Sliders, Accordion, Filter Tabs, Grid Search, Newsletter, Choice Cards, Service Words. Shared components: sliders, accordions, filters, search, the newsletter, choice cards and the service words.
- 21–23 — Wrap Moment, Dyno Bars & Stage Finder, Headlights. The three home pages’ scroll moments.
- 24–38 — Wrap Quote, Film Library, Dyno Day Countdown, Battery Estimator, Battery Check Wizard, Detailing & Battery Ring, Care Plans, Contact Form, Upgrades Shop, Account Forms, My Garage, Article Tools, Demo Forms, Launch Countdown, FAQ Search. The feature pages: the wrap quote, the film library, the dyno-day countdown, the battery estimate and the booking wizard, detailing, care plans, contact, the upgrades shop, accounts and My Garage, the journal, the coming-soon countdown and the 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.
rv-spray to a picture’s wrapper so two spray-gun passes
uncover it (Spray Pass), rv-words to a title so its words rise one after another and rv-fade to
text so it rises softly into place. data-delay="0.2" staggers any of them. Add rv-wrap-hover and a
colour class (for example w-nardo-grey) to a card so its accent takes that film on hover, and a
wrap-chip inside it for the film’s name.doDynoCountdown() and 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/ | Heroes, page titles and the photo bands — 14 files: 3780×1181, 2818×1463, 2810×1187, 1920×720, 1469×807, 1190×696, … |
img/cars/ | The cars on the cards, the builds and the journal — 12 files: 1258×772, 1126×489, 1098×477, 1382×848, 640×278, 2182×1240, … |
img/faces/ | Round portraits for the reviews, the comments and the avatar groups — 6 files: 240×240 |
img/flags/ | The language picker’s flags (SVG, included) — 6 files: SVG |
img/lamp/ | Home 03’s headlights: the car at night and its running-light and beam layers (PNG with transparency) — 3 files: 2182×1240 |
img/logo/ | Logo, light logo and favicon (included) — 3 files: 409×64, 64×64 |
img/menu/ | Home previews in the mega menu — 3 files: 560×350 |
img/parts/ | Cut-out parts beside the tuning and shop sections (PNG with transparency) — 6 files: 399×272, 740×693, 654×654, 400×272, 902×902 |
img/shop/ | The upgrades in the shop, two pictures each — 15 files: 800×910, 800×800, 660×450, 1021×1161 |
img/team/ | The crew, portraits — 5 files: 845×850, 720×900, 693×850, 680×847 |
img/work/ | The bays and the hands at work — 13 files: 800×1160, 640×278, 1040×552, 2817×1972, 2817×1549, 2817×1661, … |
img/wrap/ | The wrap moment’s stage and the car’s paint and highlight layers (PNG with transparency) — 3 files: 2000×916 |
The three scroll moments draw on layers: img/wrap/ holds the stage, the car’s paintwork (a grey
shading of the body on transparency, which the film colour is multiplied into) and its highlights;
img/lamp/ holds the car at night and its running-light and beam glows on transparency. Cut your own from one
photograph each, at the same size, so the layers stay in register.
The logo files and the language flags are included and ready to use. All demo photography shown on the live preview, the car layers and the cut-out parts among it, 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 success or error message
appears under the button without reloading the page. The quote, the battery-check booking, the plans, the newsletter,
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, 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: Oxanium, Sarabun
All plugin files and icon fonts are loaded locally. The only external requests are the Google Fonts stylesheet, the Google Maps embed 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.