Overview
An evening-toned HTML template for a restaurant group with several venues under one brand: a dining room, a sushi counter, a pizzeria, a cocktail bar, a café & pâtisserie and a grill. Mesara ships three home pages, a dark and a light theme, right-to-left support, and group logic that is worked out rather than typed in: which room is open now, the free tables in each room for your day and party, the price of a private evening, gift cards valid in every room with a balance check, events across the group with seats left, careers, and a shop with collection at a room.
What’s included
- 3 home pages, each with its own scroll moment: The Group (a round table turns and is laid for each room in turn), Tonight (aperitivo, dinner and nightcap cards stack as you scroll) and Gifts & Gatherings (the gift card turns round in 3D)
- The Facade Lights preloader: a street of six facades lights its windows room by room
- Dark (the house teal) and light 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
- WebGL layers — terrazzo chips under the night bands and the double arch in stained glass in the footer — tinted by the theme colours
- Open now for every room, live, in the header, the finder, the cards and the footer
- The venue finder: kitchen, neighbourhood, price, open now and a search over dishes, with a map that follows the room
- One booking flow for all six rooms: each room’s own days, party limit and time slots; bookings listed in My Bookings
- Private dining: rooms that fit your party and an estimate from the minimum spend, the menu and service
- Gift cards: four designs, any amount from $25 to $1,000, email or a posted card, a live card preview and a balance check
- Events across the group with repeat rules, filters and seats; careers with filters and an application form
- The shop: cakes, sushi boxes, kits and experiences with collection at a room, a bag, coupon, tax, checkout and wishlist
- Fully responsive, written to W3C standards
Getting Started
Thank you for choosing Mesara. Follow the steps below to get your site live.
1. Open locally
Unzip the downloaded package and open mesara/index.html in any modern browser. No build tools or server
are required — the finder, booking, estimator, gift cards, events and shop all work straight from the files.
2. Deploy to a server
Upload the contents of the mesara/ folder to your hosting provider (FTP or your control panel) and open
your domain.
3. Customise
All custom styling lives in assets/css/style.css (numbered Table of CSS) and
assets/css/responsive.css. Colours and fonts are CSS variables — see
Colors & Fonts. Rooms, hours, menus, private rooms, events, roles, gift cards and products
live in one place — see The Group’s Logic.
assets/img/ with your own
photography at the same dimensions. The plates in img/table/ are round PNGs seen from above.File Structure
index.html / homepage-2.html / homepage-3.html | Three home pages: The Group (the turning table), Tonight (the live board and the evening stack), Gifts & Gatherings (the gift card that turns) |
venues.html / venue-details.html | The venue finder (kitchen, neighbourhood, price, open now, search, a map that follows the room) and one room’s page |
menus.html | Every room’s menu, by course, with dietary marks |
book-a-table.html | One booking flow for every room: room, date, guests, that room’s times, details |
private-dining.html | Private rooms by party size and the evening estimator with an enquiry |
about.html | The group’s story, how the house grew room by room, the founders and events |
team.html / team-details.html | Chefs and team, a chef’s profile |
events.html / event-details.html | Events across the group with room, kind and month filters; an event with seats |
careers.html / career-details.html | Open roles with filters and search; a role with the application form |
gallery.html | Photographs filtered by room |
faq.html | Questions by topic with search |
gift-cards.html | The gift card builder and the balance check |
shop.html / product-details.html / cart.html / checkout.html / wishlist.html | The shop: filters, sort and search, product, bag, checkout with collection at a room, wishlist |
blog.html / blog-details.html | The journal with search and four post formats; an article with reading time, share and comments |
contact.html | Every room’s number with its live status, the group office, the form and the map |
login.html / register.html / forgot-password.html / my-account.html | Account pages and My Bookings |
coming-soon.html / 404.html | The seventh room’s countdown, 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 (17 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 room or use (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 Documentation/ (this guide) and mesara/, the template:
mesara/
├── *.html the 32 pages, all in the root
├── sendmail.php the AJAX mail handler
└── assets/
├── css/ style + responsive (each with an .rtl twin), plugins/
├── js/ main.js (39 blocks), plugins/
├── fonts/theme-icons/ the sun and moon of the theme switch
├── webfonts/ Font Awesome Free font files
└── img/ images, one folder per room or use
├── banner/ 24 files
├── bar/ 14 files
├── blog/ 6 files
├── cafe/ 13 files
├── dining/ 16 files
├── events/ 6 files
├── flags/ 6 files
├── gift/ 4 files
├── grill/ 3 files
├── logo/ 8 files
├── menu/ 3 files
├── people/ 10 files
├── pizza/ 8 files
├── rooms/ 8 files
├── shop/ 15 files
├── sushi/ 12 files
├── table/ 19 files
└── team/ 11 files
Colors & Fonts
The design is driven by CSS variables at the top of style.css. Colours used with transparency have an
-rgb twin (for example --ms-copper-rgb) — change both together.
--ms-teal--ms-deep--ms-surface--ms-copper--ms-copper-soft--ms-text--ms-bg--ms-surface--ms-heading--ms-accentThe house teal is the ground of the default theme, deep teal the bands and the footer, copper the buttons, rules,
diamonds and small accents (copper buttons carry teal text). Every room has its own colour, set by a
.tone-<room> class on its cards, panels and booking summary:
.tone-oro.tone-kumo.tone-forno.tone-velluto.tone-lune.tone-fumoFonts
Two Google Fonts: Jost (the light spaced capitals of the titles, body, navigation, buttons) and
Gilda Display (the large faint words behind the titles, the room names, prices and figures). Swap them
in the Google Fonts link and the --ms-ff-body / --ms-ff-display variables.
Logo
The logo is a double arch — two doorways sharing one pillar, a half sunburst rising in each — over MESARA
in spaced capitals. It ships as PNG files in assets/img/logo/: logo-light.png (light lettering, the
default theme), logo.png (teal lettering, light grounds), logo-row-light.png / logo-row.png
(the arch beside the name, the mobile menu and the gift card), mark.png, ring.png (the rotating
ring on page titles) and favicon.png.
Dark & Light Mode
The house teal is the default theme. Every header has a switch to the light theme (stone grounds, white surfaces, teal
ink); the choice is saved under mesara-theme and applied by a one-line script in the <head>
before the page paints. The light values sit in [data-theme="light"] { … } right after :root.
Blocks with the class is-night (the reserve band, the figures band, a room’s menu, the private dining estimate,
the gift card, the balance check, the sidebar call-outs and the footer) stay teal in both themes. To open the site light for first-time visitors, add data-theme="light" to the
<html> tag of each page.
The Group’s Logic
Every figure comes from one data block, JS block 09 Group Data near the top of
main.js (var GROUP). Edit it once and the cards, hours, slots, prices and totals follow.
venues | Each room: name, kind, kitchen and neighbourhood (the finder’s filters), address and phone, price band, colour, photos, its weekly hours (minutes after midnight per weekday, Sunday first; a span may run past midnight, e.g. 1560 = 2:00 am), its book rules (slot interval, last seating, table time, party limit, how busy) and its menu by course with dietary marks. |
rooms / service | Private rooms: seated and standing capacity, minimum spend and menus a head; service 12.5%. |
events | Events with a repeat rule (weekly, monthly on the nth weekday, or once), the room (all = the whole group), seats, seats booked and price a seat. |
gift | Designs, preset amounts, $25–$1,000, postage $4, gift box $8, valid 36 months, and the demo cards for the balance check. |
roles / team / posts | Open roles (room, team, hours, pay, days since posted), the team and the journal. |
products / shop | Shop products and the shop rules: free local delivery from $80, otherwise $6 (same-day courier $14), tax 8.875%, coupon MESARA10 for 10% off. |
Opening hours and slots
oro | Sun closed; Mon closed; Tue 5:30 pm–11:00 pm; Wed 5:30 pm–11:00 pm; Thu 5:30 pm–11:00 pm; Fri 5:30 pm–11:30 pm; Sat 12:00 pm–2:30 pm & 5:30 pm–11:30 pm · slots every 15 min, last seating 90 min before closing, up to 6 guests |
kumo | Sun 12:00 pm–2:30 pm & 5:30 pm–10:00 pm; Mon 5:30 pm–11:00 pm; Tue 12:00 pm–2:30 pm & 5:30 pm–11:00 pm; Wed 12:00 pm–2:30 pm & 5:30 pm–11:00 pm; Thu 12:00 pm–2:30 pm & 5:30 pm–11:00 pm; Fri 12:00 pm–2:30 pm & 5:30 pm–11:30 pm; Sat 12:00 pm–2:30 pm & 5:30 pm–11:30 pm · slots every 30 min, last seating 75 min before closing, up to 8 guests |
forno | Sun 12:00 pm–10:00 pm; Mon 12:00 pm–11:00 pm; Tue 12:00 pm–11:00 pm; Wed 12:00 pm–11:00 pm; Thu 12:00 pm–11:00 pm; Fri 12:00 pm–12:00 am; Sat 12:00 pm–12:00 am · slots every 15 min, last seating 60 min before closing, up to 12 guests |
velluto | Sun 5:00 pm–12:00 am; Mon 5:00 pm–1:00 am; Tue 5:00 pm–1:00 am; Wed 5:00 pm–1:00 am; Thu 5:00 pm–1:30 am; Fri 5:00 pm–2:00 am; Sat 5:00 pm–2:00 am · slots every 30 min, last seating 120 min before closing, up to 10 guests |
lune | Sun 8:30 am–5:00 pm; Mon 7:30 am–6:00 pm; Tue 7:30 am–6:00 pm; Wed 7:30 am–6:00 pm; Thu 7:30 am–6:00 pm; Fri 7:30 am–6:00 pm; Sat 8:30 am–5:00 pm · slots every 30 min, last seating 60 min before closing, up to 6 guests |
fumo | Sun 12:00 pm–9:00 pm; Mon closed; Tue 5:00 pm–11:00 pm; Wed 5:00 pm–11:00 pm; Thu 5:00 pm–11:00 pm; Fri 5:00 pm–11:30 pm; Sat 5:00 pm–11:30 pm · slots every 15 min, last seating 90 min before closing, up to 10 guests |
A room is open now when the time falls inside one of today’s spans, or inside last night’s span that runs
past midnight. Its slots run from each opening every interval up to the last seating; on today’s date times within the
next half hour drop out. Some tables show as taken so the demo looks lived-in: a stable value from the room, the date and
the minute, busier at the weekend, at prime time and for parties of five or more — replace slotsFor()
(block 10 Group Clock) with your reservations system’s answer.
The booking flow
Room → date (that room’s closed days greyed) → guests (up to the room’s limit; at the limit the page points
to private dining) → time (that room’s free slots for the day and party) → details. Continue never blocks; only
Confirm checks the details. A “Book” button on any room’s card carries the room to the flow (the home’s form
carries the room, date and guests too) through the browser’s storage, so links stay plain pages. Confirmed bookings are
kept in the browser and listed on my-account.html, where they can be cancelled.
Private dining estimate
Gift cards
The bag, the wishlist, the coupon and the bookings are kept in the browser (localStorage). The first visit starts
with a small demo bag, wishlist and booking; to start empty, set the demo lists in doShop() and
doMyAccount() to []. Checkout, booking, seats, enquiries and applications confirm on screen with a
reference — connect them to your own systems.
WebGL Layers
Two small fragment shaders draw the moving layers, each in one canvas: terrazzo — angular stone chips in copper, stone and teal drifting slowly under the night bands — and glass — the double arch drawn in leaded stained glass in the footer, the rooms’ colours in its panes and a warm light moving behind it.
<canvas class="ms-gl" data-gl="terrazzo" aria-hidden="true"></canvas>
- Colours — each layer reads
--gl-1,--gl-2,--gl-3and--gl-alphafrom CSS. - Performance — a layer runs only while on screen; reduced motion gets one still frame; without WebGL the section’s own background (and the footer’s faint arch image) shows.
- Remove one — delete the canvas; nothing else depends on it.
RTL (Right To Left)
Right to left comes from the stylesheets, not from separate pages. The language picker beside the theme switch lists the
languages that read left to right and right to left; choosing Arabic or Hebrew stores the direction (mesara-dir)
and reloads, and the head script sets dir="rtl" and swaps the three stylesheets for the files named in their
data-rtl attribute. Nothing is translated. To make a page right to left for good, add dir="rtl" to its
<html> tag and swap:
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 |
style.rtl.css keep what must not mirror (the booking dates still read left to right). Regenerate with
npx rtlcss style.css style.rtl.css and copy that block back.JavaScript Guide
All custom behaviour lives in assets/js/main.js, wrapped in a jQuery IIFE and organised into 39 numbered
blocks; each is a self-contained doSomething() that skips pages without its section:
- 01 — Preloader
- 02 — Sticky Header
- 03 — Offcanvas Menu
- 04 — Scroll Reveals
- 05 — Back To Top
- 06 — Anchor Scroll
- 07 — Light & Dark Mode, Direction
- 08 — WebGL Layers
- 09 — Group Data
- 10 — Group Clock
- 11 — Custom Select
- 12 — Counters & Rings
- 13 — Hero Sliders
- 14 — Card Sliders
- 15 — Accordion
- 16 — Filter Tabs
- 17 — Grid Search
- 18 — Newsletter
- 19 — Choice Cards
- 20 — Doorway Light
- 21 — Table Turn
- 22 — Evening Stack
- 23 — Gift Turn
- 24 — Venue Finder
- 25 — Quick Booking
- 26 — Table Booking
- 27 — Private Dining
- 28 — Gift Cards
- 29 — Events
- 30 — Careers
- 31 — Contact Form
- 32 — Shop
- 33 — Account Forms
- 34 — My Bookings
- 35 — Article Tools
- 36 — Demo Forms
- 37 — Launch Countdown
- 38 — Tabs
- 39 — FAQ Search
ms-halves to a photo frame (a frame with one <img>
that fills it) and its halves slide in from opposite sides and meet; add ms-fade to text so it rises softly;
data-delay="0.2" staggers either. Add ms-door to a card for the doorway light on hover.Images
The download ships with neutral placeholder images at the correct sizes. Replace them with your own photos using the same
file names. Images are grouped inside assets/img/:
img/banner/ | Wide heroes, page-title banners and photo bands — 24 files: 2820×1264, 2809×1068, 2809×1005, 2560×1438, 2811×898, 2809×907, … |
img/bar/ | Velluto: cocktails and the bar — 14 files: 600×816, 1300×931, 1200×1200, 600×600, 1406×2109, 600×592, … |
img/blog/ | Journal posts — 6 files: 1300×931, 1375×1022 |
img/cafe/ | Lune: pastries and coffee — 13 files: 800×799, 600×492, 1000×1270, 1300×917, 900×1274, 900×1250, … |
img/dining/ | Oro: plated dishes — 16 files: 756×944, 1200×1200, 600×600, 900×1150, 600×816, 600×696, … |
img/events/ | Events and private dining — 6 files: 626×860, 1198×1646, 1406×1795, 900×1149 |
img/flags/ | The language picker’s flags (SVG, included) — 6 files: SVG |
img/gift/ | The four gift card designs (included) — 4 files: 520×328 |
img/grill/ | Fumo: the grill — 3 files: 672×1080 |
img/logo/ | Logo, light logo, mark, ring and favicon (included) — 8 files: 512×512, 409×128, 64×64, 547×80, 546×80, 360×360 |
img/menu/ | Home previews in the mega menu — 3 files: 560×350 |
img/people/ | Guests and portraits — 10 files: 630×404, 414×620, 600×492, 1406×2374, 320×431, 900×1150, … |
img/pizza/ | Forno: pizza and the room — 8 files: 800×1098, 1300×931, 333×333, 900×1250, 900×1297 |
img/rooms/ | The rooms and private rooms — 8 files: 900×1113, 672×1080, 1190×800, 1300×1622, 900×1108, 1000×1359, … |
img/shop/ | Shop product cut-outs — 15 files: 800×855, 800×680, 600×859, 800×1145 |
img/sushi/ | Kumo: sushi and the counter — 12 files: 1000×1000, 1180×1680, 1300×1300, 1300×931, 600×696, 676×676, … |
img/table/ | Home 1’s turning table (the terrazzo top is included) and each room’s plates — 19 files: 360×360, 1000×1000 |
img/team/ | Chefs and team — 11 files: 900×1296, 818×818, 900×1264, 900×1149, 900×1150 |
The logo files, the gift card designs, the terrazzo table top and the flags are included. All demo photography on the live preview is for preview purposes only and is not included in the download.
Contact Form
The contact form posts to sendmail.php, a lightweight AJAX mail handler; the message appears under the button
without reloading. The newsletter, booking, enquiry, gift card, seats, application, comment, checkout and account forms confirm
on screen and are ready to connect to your own systems. To activate the mail handler:
1. Set your email address
$email = 'example@example.com';
2. Upload to a PHP host
The form needs PHP mail() support. Locally or on a static host it shows an “upload to a PHP-enabled
host” notice instead.
3. Optional: enable Google reCAPTCHA v3
- Create v3 keys for your domain in the Google reCAPTCHA admin console
- In
sendmail.php, 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 before</body>:
<input type="hidden" name="g-recaptcha-response" id="g-recaptcha-response">
<script src="https://www.google.com/recaptcha/api.js?render=YOUR_SITE_KEY"></script>
<script>
grecaptcha.ready(function () {
grecaptcha.execute('YOUR_SITE_KEY', { action: 'contact' }).then(function (token) {
document.getElementById('g-recaptcha-response').value = token;
});
});
</script>
Credits
- Bootstrap 5.3.3
- jQuery 3.7.1
- Swiper 11
- GSAP 3 + ScrollTrigger
- Fancybox 3.5
- Font Awesome Free
- RTLCSS
- Google Fonts: Jost, Gilda Display
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.