Overview

Cyclora template home pages

A clean, white HTML template for a photo studio complex that hires its rooms by the hour and its kit by the day: two white cycloramas, a daylight loft, a black box and a tabletop bay, a gear room of bodies, lenses, lights, modifiers and grip, and a crew on call. Cyclora ships three home pages, a light and a dark theme, right-to-left support, and logic that is worked out rather than typed in: live availability from the visitor’s own clock, a day planner that refuses booked hours, the cheapest mix of hours, half days and days with overtime and a Sunday surcharge, gear by the day with a weekend rule and a weekly cap, a hire bag with a damage waiver, a coupon, VAT and a refundable deposit, crew by the half or full day, a six-step booking and a currency switch.

What’s included

  • 3 home pages, each with its own scroll moment: The Cyc Turns (Studio One’s white cove turns to face you and the lights roll in from the wall into the set-up), Key, Fill, Rim (a lighting plan from above beside the portrait it lights, the three lights switching on in turn) and 24 To 200 mm (one camera, one scene, the lens zooming with the scroll)
  • A white theme by default and a dark theme on one switch, remembered between visits and applied before the page paints
  • Right-to-left stylesheets and a flag language picker; a currency switch (pounds, dollars, euros) that repaints every price
  • WebGL: the Seamless Sweep, a paper backdrop slowly changing colour, as the ground of the plain bands, and a camera lens in the footer drawn in an RGB chromatic split; three.js studio scenes for two of the scroll moments
  • Live availability: free now and until when, in use and free from when, the top bar’s count of free studios and a day board of every studio hour by hour
  • Studios with filters, two studio pages with a day planner, a rates page with an estimate, and a six-step booking
  • The gear room: categories, day-rate filter, search, sort, prices for the hire days, ready kits, the hire bag, checkout with an order number, saved kit
  • Crew with day rates, services, how hire works, Made Here with tabs and a lightbox, two shoot stories with their kit lists
  • Journal, FAQ with search, contact with a map and the PHP form, account pages, coming soon with a countdown, 404
  • Strobe Pop preloader, Aperture photo reveals through a six-blade iris, the flash-pop hover, Swiper sliders and Fancybox
  • Fully responsive from 390 px to wide screens
📄 32 HTML files

Getting Started

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

1. Open locally

Unzip the downloaded package and open cyclora/index.html in any modern browser (Chrome, Firefox, Edge, Safari). No build tools or server are required — the live availability, the planner, the estimate, the booking, the gear room and the bag all work straight from the files.

2. Deploy to a server

Upload the contents of the cyclora/ 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 studios, their rates and hours, the gear, the crew, the papers and the hire rules live in one place — see Studio & Hire Logic.

Tip: Replace the neutral placeholder images in assets/img/ with your own photography at the same dimensions for the best result. The gear packshots in img/gear/ are transparent PNGs on a square.

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 Studios (the cyclorama turns), The Gear Room (key, fill and rim), Book A Day (24 to 200 mm)
studios.htmlThe five studios with type tabs, must-haves, floor area and free-now-first; the facilities strip; the spec sheet side by side
studio-details.htmlStudio One: gallery, specs, the day planner from live availability, the price for your hours, the floor plan
studio-details-2.htmlThe Daylight Loft: the gallery first, the four sets, the light through the day, a compact planner
rates.htmlEvery rate: the studio tables, the estimate, the gear day factor, cover and deposit, extras, crew rates
booking.htmlBook A Studio in six steps: studio, day and hours, gear, crew and extras, details, summary
gear.html / gear-details.htmlThe gear room with categories, day rate, search, sort and the hire days; one piece with its hire dates and the weekend rule
bag.html / checkout.html / wishlist.htmlThe hire bag (period, gear, studios, crew, paper, cover, coupon, deposit, VAT), checkout with an order number, saved kit
crew.html / crew-details.htmlThe crew with role tabs and day rates; one crew profile
services.html / service-details.htmlStudio services; set build and props
how-it-works.htmlHow hire works in five steps
made-here.html / project-details.html / project-details-2.htmlThe work shot in the studios with tabs, search and a lightbox; two shoot stories with their kit lists
about.htmlThe building, the figures, how the studios work, the crew
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 status, map, hours and the contact form
account.html / login.html / register.html / forgot-password.htmlThe account (bookings, orders, details) and the login pages
coming-soon.html / 404.htmlCountdown to Studio Six, 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 (33 blocks)
assets/js/plugins/jQuery, Bootstrap, Swiper, Fancybox, GSAP, ScrollTrigger, three.js (the two studio scenes)
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 cyclora/, the template. Every page sits in the template’s root; everything the pages load sits under assets/:

cyclora/
├── *.html                              the 32 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 (33 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
    │       └── three.min.js            the two studio scenes (Home 01 and Home 03 only)
    ├── fonts/
    │   └── theme-icons/                the sun and moon of the theme switch
    ├── webfonts/                       Font Awesome Free font files
    └── img/                            images, one folder per section
        ├── banner/                      15 files
        ├── blog/                        4 files
        ├── crew/                        6 files
        ├── faces/                       5 files
        ├── flags/                       6 files
        ├── gear/                        25 files
        ├── icons/                       34 files
        ├── logo/                        4 files
        ├── menu/                        3 files
        ├── process/                     5 files
        ├── studios/                     13 files
        └── work/                        28 files

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

Ink--cy-ink
Studio Blue--cy-blue
Blue Deep--cy-blue-deep
Blue Soft--cy-blue-soft
White Ground--cy-bg
Pale Band--cy-band
Plate--cy-plate
Heading--cy-heading
Body--cy-text
Blue Ink--cy-accent-text
Mint--cy-mint
Honey--cy-honey
Coral--cy-coral
Lilac--cy-lilac
Teal--cy-teal

White is the ground and the pale band alternates with it; ink is the headings, the square buttons, the top bar and the footer. Studio blue is the one accent: links, the current page, the short rule under every title and the hover of every button. Mint, honey and coral are the availability signals (free, little time left, booked); with lilac and teal they are also the paper colours on the rail and the colours the Seamless Sweep drifts through. --cy-bg, --cy-band, --cy-surface, --cy-heading and --cy-text are the semantic names the components use — the dark theme swaps those (see Dark & Light Mode).

Fonts

Two Google Fonts are loaded in the head of each page: Poppins (headings in tracked capitals, body, navigation and buttons) and IBM Plex Mono (eyebrows, specs, rates, slot times and the readouts). Swap them by editing the Google Fonts link and the --cy-ff-body / --cy-ff-mono variables.

Logo

The logo is CYCLORA in tracked Poppins capitals with its O drawn as a six-blade aperture. It ships as ready-made PNG files in assets/img/logo/:

  • logo.png — ink, for white bars
  • logo-light.png — white, over photographs, on the black bar, in the dark theme and the footer
  • mark-light.png — the aperture alone, white (the account and error pages)
  • favicon.png — the browser tab icon

To use your own logo, replace these files; the header sizes the logo by its height.

Dark & Light Mode

Cyclora opens white. Every header (and the mobile menu) has a theme switch that turns the dark pages on. The choice is saved in the browser under the key cyclora-theme and applied by a one-line script in the <head> before the page paints. The switch sets data-theme="dark" on the <html> tag.

Dark Ground--cy-bg
Dark Band--cy-band
Dark Surface--cy-surface
Dark Heading--cy-heading
Dark Body--cy-text
Blue On Dark--cy-accent-text
  • Tokens — the dark values sit in one block, [data-theme="dark"] { … }, right after :root in style.css.
  • Bands that stay black — sections with the class is-night (the rates band, the lighting diagram, the estimate, the crew rates, the footer) are black in both themes.
  • Icons and plans — each line icon and floor plan ships in an ink and a white version; the right one shows by theme and ground.
  • Start dark — add data-theme="dark" to the <html> tag of each page; the switch still works.

Studio & Hire Logic

The figures on every page come from one data block, JS block 09 Cyclora Data near the top of main.js (var CYCLORA). Edit it once and the rates, the planner, the estimate, the booking, the gear room and the bag follow. Prices are in pounds (the currency switch converts them); times are minutes after midnight (420 = 7:00); weekdays run 0 = Sunday to 6 = Saturday.

currencyPounds, dollars and euros with their symbols and rates to the pound.
hoursOpening hours for each weekday; the clock, the planners, the board and the hours lists read them.
ratesA half day is 4 hours and a day 10; overtime past the day at 1.5× the hour; Sundays +20%; VAT 20%.
studiosEach studio’s name, kind, floor, cove, ceiling, power, access, daylight, rates, minimum hours and photo.
cats / gear25 lines of kit in 5 categories, each with a day rate, a replacement value (the deposit comes from it) and the stock.
hireThe day factor, the damage waiver (10% of the gear), the deposit (20% of the value, capped at £1,500) and the coupon FIRSTSHOOT for 10% off the gear.
kits / crew / papersReady kits with their saving; the crew’s half and full day rates; the paper colours, £45 a drop.
busyHow busy each studio is: the demo’s live availability is seeded from it and the date, so every page agrees.

The studios

Studio OneCyc Studio · 230 m² · £95 an hour, £340 a half day, £640 a day, 2-hour minimum
Studio TwoCyc Studio · 140 m² · £70 an hour, £250 a half day, £460 a day, 2-hour minimum
The Daylight LoftDaylight Studio · 160 m² · £80 an hour, £290 a half day, £520 a day, 2-hour minimum
The Black BoxInfinity Black & Video · 110 m² · £65 an hour, £230 a half day, £420 a day, 2-hour minimum
Tabletop BayProduct Studio · 45 m² · £35 an hour, £120 a half day, £220 a day, 1-hour minimum

The cheapest way to book

For any number of hours the planner, the estimate and the booking compare the hourly rate, a half day plus extra hours, and the full day (with overtime past ten hours), and charge the cheapest. Sundays add the surcharge; VAT goes on top.

Worked examples: Studio One for 6 hours on a weekday: a half day plus 2 hours, £530 (six single hours would be £570), £636.00 with VAT. For 12 hours: the day plus 2 hours of overtime, £925, £1,110.00 with VAT. For 4 hours on a Sunday: the half day plus the surcharge, £408, £489.60 with VAT.

Live availability

Each studio’s bookings for a day come from a seeded pattern (the studio and the date) plus the visitor’s own bookings, saved in the browser when they book. Replace dayBlocks() in block 10 with a call to your own calendar to show real bookings; everything else reads from it.

Gear by the day

1 day1× the day rate
2 days1.5× the day rate
3 days2× the day rate
4 days2.5× the day rate
5 days3× the day rate
7 days3× the day rate
10 days4.2× the day rate

A Friday pick-up with a Monday return counts as one day.

Worked example: the demo bag (the 45MP body, the 85mm, two monolights and an octabox) for three days: gear £446.00, the first assistant for a day £240.00, the damage waiver £44.60, VAT £146.12 — £876.72, with a refundable deposit of £1,500.00 held at pick-up.

The hire bag, the saved kit, the coupon and the visitor’s bookings are kept in the browser (localStorage), so they follow the visitor from page to page. The first visit starts with a small demo bag so the bag and checkout have something to show; to start empty, edit readBag() in block 27. Checkout and the booking confirm on screen with a reference — connect them to your own systems to take real orders.

WebGL & 3D

Two small WebGL shaders draw the moving layers: the Seamless Sweep — a paper backdrop curving from the wall into the floor, its colour slowly drifting between three paper colours under a soft vignette, as the ground of the plain bands — and the lens in the footer, drawn three times, once per colour channel, at a slightly different scale: an RGB chromatic split that breathes while the iris inside opens and closes. Each is one canvas:

<canvas class="cy-gl" data-gl="sweep" 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.
  • Studio scenes — Home 01 and Home 03 build Studio One’s cove, the lights and a still life with three.js from shapes (no textures), and draw only when the scroll moves 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.
  • Remove one — delete the canvas; nothing else depends on it.

RTL (Right To Left)

Cyclora 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) lists the languages that read left to right and right to left. Choosing Arabic stores the language and the direction (keys cyclora-lang and cyclora-dir) and reloads; the script in <head> then sets dir="rtl" and swaps the three stylesheets for the files named in their data-rtl attribute. Nothing is translated — you bring your own right-to-left copy. To make a page right to left for good:

1. Set The Direction

<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

Prices, times, the day board and the lighting plan 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 33 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 Strobe Pop preloader, the header, the Aperture reveals, the theme and direction switch and the WebGL layers.
  • 09–10 — Cyclora Data, Studio Clock & Availability. Cyclora Data holds every figure; the studio clock works out live availability from the visitor’s own time: free now and until when, in use and free from when, the top bar’s count and the day board.
  • 11–19 — Custom Select, Currency, Hero Sliders, Card Sliders, Accordion, Filter Tabs, Grid Search, Newsletter, Choice Cards. Shared components: selects, the currency switch, sliders, accordions, filters, search, forms.
  • 20–22 — The Cyc Turns, Lighting Diagram, Focal Length. The three home pages’ scroll moments.
  • 23–33 — Day Planner & Estimate, Booking Wizard, Studio Filters, Contact Form, Hire Bag & Gear Room, Account Forms, Account Page, Article Tools, Demo Forms, Launch Countdown, FAQ Search. The feature pages: the day planner and the estimate, the booking wizard, the studio filters, contact, the hire bag and gear room, accounts, the journal, demo forms, the countdown, 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.

Reveals: add cy-iris to a photo frame so the photo opens through a six-blade iris, cy-fade to text so it rises softly into place, and cy-rule for the short line under a title. data-delay="0.2" staggers either. Add cy-flash to a card so it flashes white for an instant on hover, like a strobe.
Countdown: the coming-soon page counts down to 10:00 on the next 20 March — 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/Hero slides, page-title banners and photo bands — 15 files: 2809×1609, 2809×1024, 1920×1100, 2809×1826, 2809×1750, 2830×777, …
img/blog/Journal posts — 4 files: 1300×900, 1386×1155
img/crew/The crew, square portraits — 6 files: 800×800
img/faces/Round portraits for quotes, bylines and avatar groups — 5 files: 800×800
img/flags/The language picker’s flags (SVG, included) — 6 files: SVG
img/gear/The gear room’s packshots, transparent PNG on the seamless ground (included) — 25 files: 900×900
img/icons/Line icons, each in an ink and a white version (included) — 34 files: 128×128
img/logo/Logo, light logo, the aperture mark and favicon (included) — 4 files: 1150×140, 64×64, 412×412
img/menu/Home previews in the mega menu — 3 files: 560×350
img/process/The five steps of How Hire Works — 5 files: 1021×712, 1382×964
img/studios/The loft, the tabletop bay, the shoots and the floor plans (the plans are included) — 13 files: 1800×1240, 1300×900, 800×1006, 1382×1587, 1382×1145, 1408×2105, …
img/work/Made Here: the shoots in the studios — 28 files: 800×1196, 800×800, 2816×2348, 800×667, 1000×1000, 1408×1632, …

The logo files, the line icons, the gear packshots, the floor plans and the language flags are included and ready to use. All demo photography shown on the live preview is for preview purposes only and is not included in the download.

Contact Form

The contact form and the comment form post to sendmail.php, a lightweight AJAX mail handler. The success or error message appears under the button without reloading the page. The newsletter, booking, 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
  • three.js
  • Fancybox 3.5
  • Font Awesome Free
  • RTLCSS
  • Google Fonts: Poppins, IBM Plex Mono

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.