Overview
An animated HTML template for clinics, hospitals and dental practices. Curavia ships three home pages, a light and a dark theme, right-to-left support and a pharmacy, with medical logic that is worked out rather than typed in: which site is open on the clinic’s own clock, booking from each doctor’s weekly shifts with real free times, a weekly timetable, care plans by month or year, an insurance cost estimator, dental prices with and without the dental plan, the emergency department’s typical wait and a department finder.
What’s included
- 3 home pages, each with its own scroll moment: the Ward Walk (Multi-Specialty Clinic), the Gallery Drift (General Hospital) and the Floating Care renders (Dental Studio)
- Light and dark mode on one switch in every header and in the mobile menu, remembered between visits and applied before the page paints
- Right-to-left stylesheets and a flag language picker; Arabic and Hebrew turn any page right to left
- A WebGL layer — morning light through window blinds over the heroes and page titles, and the logo’s ring of dots in the footer — tinted by the theme colours
- Opening hours for six sites with open or closed now, a location switch with a Google map, the emergency department’s typical wait by hour
- Four-step appointment booking from each doctor’s shifts, the hero quick-booking dock, a live summary, a reference and add-to-calendar
- Doctor directory with department filters, doctor profiles with their week, the weekly timetable and the department finder
- Care plans monthly or yearly with a comparison table; the insurance cost estimator; dental prices with the dental plan
- New-patient registration in steps with age, BMI and insured-only fields; the patient account
- Pharmacy: categories, price range and sort, product page, cart, wishlist, coupon, free-delivery meter, tax, checkout
- Photo Flick preloader, Ruled Rise reveals, Swiper sliders and Fancybox video and gallery popups
- Fully responsive, W3C-valid, zero console errors
Getting Started
Thank you for choosing Curavia. Follow the steps below to get your site live.
1. Open locally
Unzip the downloaded package and open curavia/index.html in any modern browser (Chrome, Firefox, Edge,
Safari). No build tools or server are required — the opening hours, booking, timetable, estimators, pharmacy and
every filter work straight from the files.
2. Deploy to a server
Upload the contents of the curavia/ 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. Site hours, departments, doctors and their shifts, insurance plans and
the pharmacy each sit in one place — see Medical Logic.
assets/img/ with your own photography at the
same dimensions for the best result. Keep the floating molar, capsule and pearl in img/dental/ as transparent PNGs.
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: Multi-Specialty Clinic (the Ward Walk), General Hospital (the Gallery Drift) and Dental Studio (the Floating Care renders) |
about.html / our-clinic.html | About the network with its leaders and history; the clinic tour with amenities and a gallery |
services.html / department-details.html | Eleven departments with the department finder; a department with its tests, prices, team and questions |
doctors.html / doctor-details.html / timetable.html | The doctors with department filters; a doctor’s week and booking; the weekly timetable |
appointment.html | Four-step booking: department, doctor, a free day and time, your details; reference and add-to-calendar |
pricing.html / insurance.html | Care plans monthly or yearly with a comparison table; the insurance cost estimator |
locations.html / patient-registration.html | Six sites with their hours and a map switch; the new-patient registration form |
faq.html / contact.html | Questions with search and groups; contact cards, the message form and a map |
shop.html / product-details.html / cart.html / checkout.html / wishlist.html | Pharmacy with categories, price range and sort; product page; cart; checkout; wishlist |
account.html / login.html / register.html / forgot-password.html | Patient account (appointments, results, orders, profile) and the sign-in pages |
blog.html / blog-details.html | The journal with category and search, and an article with comments |
coming-soon.html / 404.html | Countdown page and error page |
sendmail.php | AJAX mail handler for the forms (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, and the wide-screen step at 1600 |
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 (44 blocks) |
assets/js/plugins/ | jQuery, Bootstrap, Swiper, Fancybox, GSAP, ScrollTrigger |
assets/img/ | Images, one folder per section (see Images) |
assets/fonts/curavia-icons/ | The interface and medical icon set (cvi- classes), loaded locally |
assets/webfonts/ + assets/css/fontawesome-all.css | Font Awesome Free (brand logos), loaded locally |
Folder Structure
The package unzips to two folders: Documentation/ (this guide) and curavia/, the template.
Every page sits in the template’s root; everything the pages load sits under assets/:
curavia/
├── *.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 (44 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/
│ └── curavia-icons/ the interface and medical icon set (css, woff2)
├── webfonts/ Font Awesome Free font files
└── img/ images, one folder per section
├── about/ 8 files
├── banner/ 19 files
├── blog/ 9 files
├── dental/ 4 files
├── departments/ 20 files
├── flags/ 6 files
├── gallery/ 6 files
├── hospital/ 2 files
├── lab/ 3 files
├── logo/ 5 files
├── programs/ 1 files
├── shop/ 18 files
└── team/ 15 files
To publish the site, upload the contents of curavia/ 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 (section 1.1). Change a token
once and every section, button and card updates. Colours used with transparency have an -rgb twin (for
example --cv-color-primary-rgb) — change both together.
--cv-color-primary--cv-color-primary-deep--cv-color-primary-light--cv-color-ink--cv-color-body--cv-color-mist--cv-color-pale--cv-color-ok--cv-color-peach-soft--cv-color-mint-soft--cv-color-peri-soft--cv-tonalPeriwinkle carries the buttons, the top bar, the accent words, the panels and the call-to-action band; ink the headings, the night bands and the footer; mist the offset blocks behind the photographs. Green marks only “open now” and free places. The three soft grounds sit behind the pharmacy’s product photographs. The variables keep their role names, so a new palette is a change of values only.
Fonts
Two Google Fonts are loaded in the head of each page: Roboto Flex (headings, navigation, buttons and
labels) and Zilla Slab (body text). Swap them by editing the Google Fonts link and the
--cv-ff-head / --cv-ff-body variables.
Logo
The logo is a ring of twelve graded periwinkle dots around a rounded plus, beside the name “Curavia”. It
ships as ready-made PNG files in assets/img/logo/:
logo.png— for light grounds: the header and the light panelslogo-light.png— for dark grounds: the header in dark mode, the mobile menu and the footermark.png/mark-512.png— the ring and plus alone (the preloader, the booking summary and the home-screen icon)favicon.png— the browser tab icon
To use your own logo, replace these files; the header sizes the logo by its width, so a file of another shape needs at most one value changed in section 3.2.
Light & Dark Mode
Every header and the mobile menu have a theme switch. The choice is saved in the browser under the key
cv-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.
--cv-bg--cv-surface--cv-accent--cv-night- Tokens — the dark values sit in one block,
:root[data-theme="dark"] { … }, right after:rootinstyle.css. Change a dark colour there. - Bands that stay coloured — the periwinkle panels and the call-to-action band keep their colour in both themes; the night bands and the footer deepen with the page.
- Start dark — to open the site dark for everyone, add
data-theme="dark"to the<html>tag of each page; the switch still works and is still remembered.
Medical Logic
Nothing on the pages goes out of date: the hours, free times and dates are worked out in the browser from one data
block at the top of main.js — JS block 01 Clinic Data, var CLINIC. Times
are read on the clinic’s clock (tz: "America/New_York"), so a visitor in another time zone sees the same open
or closed line as one in the building. Prices are in US dollars.
Opening hours
CLINIC.sites holds each site’s hours by weekday (0 = Sunday, null = closed). Block
06 Opening Hours paints every open or closed line — the top bar, the location cards, the footer
and the contact cards — with “until 20:00 today” or “opens tomorrow at 08:00”.
| Curavia Medical Center | Mon 08:00 – 20:00; Tue 08:00 – 20:00; Wed 08:00 – 20:00; Thu 08:00 – 20:00; Fri 08:00 – 20:00; Sat 09:00 – 15:00; Sun Closed |
| Curavia General Hospital | Mon 00:00 – 24:00; Tue 00:00 – 24:00; Wed 00:00 – 24:00; Thu 00:00 – 24:00; Fri 00:00 – 24:00; Sat 00:00 – 24:00; Sun 00:00 – 24:00 |
| Curavia Dental Studio | Mon 08:00 – 18:00; Tue 08:00 – 18:00; Wed 08:00 – 18:00; Thu 08:00 – 18:00; Fri 08:00 – 16:00; Sat 09:00 – 13:00; Sun Closed |
| Curavia Children's Clinic | Mon 08:00 – 18:00; Tue 08:00 – 18:00; Wed 08:00 – 18:00; Thu 08:00 – 18:00; Fri 08:00 – 18:00; Sat Closed; Sun Closed |
| Curavia Laboratory | Mon 07:00 – 17:00; Tue 07:00 – 17:00; Wed 07:00 – 17:00; Thu 07:00 – 17:00; Fri 07:00 – 17:00; Sat 08:00 – 12:00; Sun Closed |
| Curavia Eye & Vision | Mon 09:00 – 17:00; Tue 09:00 – 17:00; Wed 09:00 – 17:00; Thu 09:00 – 17:00; Fri 09:00 – 17:00; Sat Closed; Sun Closed |
Doctors, shifts and free times
Each doctor in CLINIC.doctors has a department, a site and weekly shifts (weekday → start
and end). Each department in CLINIC.depts sets its visit length. Block 10 Booking Engine cuts
each shift into visits, leaves out the times already booked (a fixed pattern per doctor and date, so a reload never
reshuffles them) and the ones that have passed today, and offers only the days with a free time. “Any available
doctor” merges every doctor in the department. Block 11 Doctor Timetable lays the shifts out as the
week’s timetable. Add a doctor to the list and every page follows.
| Dr. Owen Mathis | Cardiovascular Medicine — Mon, Tue, Thu, Fri; 30-minute visits at Curavia Medical Center |
| Dr. Angela Adams | General Surgery — Tue, Wed, Thu; 40-minute visits at Curavia General Hospital |
| Dr. Edward Nash | Radiology & Imaging — Mon, Wed, Thu; 20-minute visits at Curavia General Hospital |
| Dr. Paul Wallace | Neurology & Neurosurgery — Mon, Wed, Thu; 30-minute visits at Curavia Medical Center |
| Dr. Rita Adams | Pediatrics — Mon, Tue, Thu, Fri; 20-minute visits at Curavia Children's Clinic |
| Dr. Andy Grant | Orthopedic Surgery — Tue, Wed, Sat; 30-minute visits at Curavia Medical Center |
| Dr. Diana Kelley | Gynecology — Mon, Tue, Thu; 30-minute visits at Curavia Medical Center |
| Dr. Mark Mayers | Otorhinolaryngology — Tue, Thu, Fri; 20-minute visits at Curavia Medical Center |
| Dr. Julian Sims | Ophthalmology — Mon, Wed, Fri; 20-minute visits at Curavia Eye & Vision |
| Dr. Sally Morgan | Dental Care — Mon, Tue, Thu, Sat; 30-minute visits at Curavia Dental Studio |
| Dr. Gina Tahini | Laboratory Medicine — Mon, Tue, Wed, Thu, Fri; 15-minute visits at Curavia Laboratory |
Care plans
The plan cards carry their monthly price in data-plan-price; block 15 Plan Prices shows the
yearly price as twelve months less CLINIC.yearlyOff (15%): Basic Package $16 a month or $163 a year; Advanced Package $32 a month or $326 a year; Premium Package $64 a month or $653 a year.
Insurance cost estimator
The plans sit in CLINIC.insurance and the procedures with their list prices in
CLINIC.procedures. Block 16 Cost Estimators: an office visit costs the plan’s copay;
anything else is paid from the part of the deductible not yet met, then the coinsurance share of the rest; the
year’s total stops at the out-of-pocket maximum. Self-pay takes the list price less the self-pay discount.
| Bronze Plan | $3,000 deductible, 40% coinsurance, $50 visit copay, $8,000 out-of-pocket maximum |
| Silver Plan | $1,500 deductible, 30% coinsurance, $35 visit copay, $6,500 out-of-pocket maximum |
| Gold Plan | $750 deductible, 20% coinsurance, $25 visit copay, $4,500 out-of-pocket maximum |
| Platinum Plan | $0 deductible, 10% coinsurance, $15 visit copay, $3,000 out-of-pocket maximum |
| Self-Pay (No Insurance) | 15% off the list price |
On the Dental Home the price list switches between list prices and the Curavia Dental Plan, which covers each treatment by its tier: preventive 100%, basic 80%, major 50%, ortho 50%.
More tools
- Emergency wait (block 18 Emergency Wait) —
CLINIC.erWaitholds the typical wait in minutes for each hour of the day; the hospital home shows the wait now and the quietest hour in the next twelve. It is labelled typical, never live. - Department finder (block 19 Department Finder) — a symptom or a part of the body is matched against each
department’s
keysand the best matches are listed first. - Patient registration (block 28 Patient Registration) — age from the date of birth, BMI from height and weight with its band, insurance fields shown only for insured patients; Continue always moves on and only the final submit checks the form.
- Countdown (block 32 Launch Countdown) — the coming-soon page counts down to the day in its
data-launchattribute (+45= 45 days from today, or a real date such as2027-03-01).
Booking, registration, checkout, the patient account and the sign-in forms confirm on screen — connect them to your scheduling, payment or patient system to take real bookings and orders.
Pharmacy
The products, categories and rules sit in var SHOP_DATA at the top of the shop blocks: delivery
$4.90 (express $9.90), standard delivery free on orders from $50 after any discount, sales tax
6.25% on goods and delivery, and the coupons CURAVIA10 (10% off) and FREESHIP (free delivery). The cart and wishlist live in the visitor’s browser
(localStorage), so they follow them from page to page; a first visit starts with a few demo items so the
cart, checkout and wishlist have something to show — to start empty, set seed and
seedWish to [].
CURAVIA10: −$6.25, still free
delivery, tax $3.52 — $59.77.WebGL Layer
Some sections carry a moving layer drawn by one small WebGL shader (JS block 22 WebGL Blind Light): soft slanted bands of window light drifting over the section, as one canvas placed inside it:
<canvas class="cv-gl" data-gl="blinds" data-mode="light" aria-hidden="true"></canvas> light grounds (heroes, page titles)
<canvas class="cv-gl" data-gl="blinds" data-mode="dark" data-ring="1" aria-hidden="true"></canvas> the footer, with the logo’s ring of dots
- Options —
data-amountsets the strength (0–1),data-fade="left"keeps the light off the copy side,data-ring="1"adds the slowly breathing ring of dots. - Colours — the layer is drawn in the theme’s own colours and repaints when the theme switches.
- Performance — a canvas 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) & Languages
Curavia 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 flag language picker turns any page right to left when Arabic
or Hebrew is chosen and remembers the choice (keys cv-lang and cv-dir). Nothing is translated
— you bring your own 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="ar" dir="rtl" class="no-js">
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 |
Each of the three links carries its RTL file in a data-rtl attribute — that is what the language
picker swaps. The scripts read the direction from the dir attribute: sliders and every move that must
mirror follow it on their own.
style.rtl.css and responsive.rtl.css are mirrored
twins of the LTR files, made with RTLCSS. A few hand-made rules at the end of style.rtl.css keep arrows
pointing the way the page reads and phone numbers and times in their reading order. If you change style.css,
regenerate the twin with npx rtlcss style.css style.rtl.css and copy those last rules back to its end.JavaScript Guide
All custom behaviour lives in assets/js/main.js, wrapped in a jQuery IIFE and organised into 44 numbered
blocks (see the JS INDEX comment at the top of the file):
- 01–09 — Clinic Data, Preloader, Sticky Header, Offcanvas Menu, Scroll Reveals, Opening Hours, Hero Slider, Card Sliders, Video Modal. The data every page reads and the core: the Photo Flick preloader, the header, the Ruled Rise reveals, opening hours, sliders and the video popup.
- 10–19 — Booking Engine, Doctor Timetable, Ward Walk, Gallery Drift, Floating Care, Plan Prices, Cost Estimators, Locations, Emergency Wait, Department Finder. The medical logic: booking from each doctor’s shifts, the timetable, the three homes’ scroll moments, plan prices, the insurance and dental estimators, locations, the emergency wait and the department finder.
- 20–35 — Custom Select, Light And Dark Mode, WebGL Blind Light, Counters, Contact Form, FAQ Search, Tabs, Filter Tabs, Patient Registration, Account Forms, Journal Search, Article Tools, Launch Countdown, Media Lightbox, Back To Top, Anchor Scroll. Page utilities: selects, the theme switch and language picker, the WebGL layer, counters, forms, FAQ search, tabs, filters, patient registration, the account forms, journal search, the countdown and the lightbox.
- 36–44 — Shop Store, Shop Filters, Cart Totals, Mini Cart, Product Details, Cart Page, Checkout, Wishlist Page, Stepper. The pharmacy: cart and wishlist store, shop filters, totals, mini cart, product page, cart, checkout and wishlist pages.
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 scroll moments rest in place.
cv-ruled to a photograph or card so it rises while a periwinkle
hairline sweeps across its top edge, cv-words to a title so it rises word by word, cv-rise to
copy so it fades up, and cv-draw to a hairline so it draws on. data-delay="0.2" staggers any of
them.position: sticky while the department list scrolls past it; the Gallery Drift’s columns slide against
each other with the section’s own travel (data-drift); the dental renders drift at three speeds. None
of them pins the page.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/about/ | Clinic, welcome and booking photographs, and the medical director’s signature (PNG) — 8 files: 1405×998, 1505×1072, 1342×953, 1650×863, 1508×1071, 420×120, … |
img/banner/ | Hero slides, the page-title banners and the photo bands — 19 files: 1920×540, 3018×1848, 2279×1395, 2471×695, 3034×1857, 3049×1593, … |
img/blog/ | Journal posts — 9 files: 1400×857 |
img/dental/ | Dental Home: the booking photograph and the floating molar, capsule and pearl renders (PNG) — 4 files: 1452×1031, 349×285, 309×309, 664×1001 |
img/departments/ | Department photographs — 20 files: 800×553, 1302×900, 1390×961, 800×615, 1300×938, 800×947, … |
img/flags/ | Language picker flags (SVG) — 6 files: SVG |
img/gallery/ | The Hospital Home’s Gallery Drift photo strip — 6 files: 650×1300, 836×836, 650×650, 800×800, 1300×938 |
img/hospital/ | Hospital photographs — 2 files: 2816×1943, 1400×857 |
img/lab/ | Laboratory photographs — 3 files: 800×547, 800×568 |
img/logo/ | Logo, light logo, mark and favicon — 5 files: 574×177, 64×64, 512×512, 1024×1024 |
img/programs/ | Programs band photograph — 1 file: 1300×1300 |
img/shop/ | Pharmacy products — 18 files: 800×800, 1038×1038 |
img/team/ | Doctor portraits and patient faces — 15 files: 800×800, 600×600, 260×260, 240×240, 220×220, 300×300 |
The logo files, the signature, the capsule and pearl renders 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, the comment form and the newsletter post to sendmail.php, a lightweight AJAX mail
handler. The success or error message appears under the button without reloading the page. The booking,
registration, 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
- Curavia icons
- RTLCSS
- Google Fonts: Roboto Flex, Zilla Slab
All plugin files and icon fonts are loaded locally. The only external requests are the Google Fonts stylesheet, the Google Maps embeds (locations, contact and the clinic tour) 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.