Overview

Posea template home pages

A quiet, monochrome HTML template for a beauty and fashion photographer who works for clients: editorials for the magazines, campaigns for beauty and fashion houses, lookbooks and talent portraits. The pages put the photographs first — full-bleed sliders, mosaics, stories laid out three ways, a lightbox gallery, tear sheets as they were printed — and the logic is worked out rather than typed in: shoot types priced by the day or the half day, a quote that adds looks, retouching, rush delivery, the usage licence and the team, a booking enquiry on a live calendar, client proofing priced against what the shoot includes, and a currency switch.

What’s included

  • 3 home pages, each with its own scroll moment: The Cover (a magazine cover builds round the portrait — the masthead drops in behind her head, cover lines, the barcode, trim marks), The Light Table (35 mm transparencies slide onto a light table and a loupe magnifies each one’s detail) and The Spread (a magazine opens across its gutter)
  • 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 (euros, pounds, dollars) that repaints every price
  • WebGL: a Moiré of two fine line screens at the edges of the page titles and night bands, and the logo’s swiped A pixel-sorting in and out in the footer
  • 14 stories for 11 clients with type, client and year filters and search; three story layouts; a clients index; 12 tear sheets drawn as magazine pages
  • Six shoot types, a rate card, a quote engine with saved quotes, a six-step booking enquiry on a live calendar, client proofing and a client area
  • Lipstick Swipe preloader, Crop Out photo reveals from each photo’s own focal point, the dodge-brush hover, Swiper sliders and Fancybox
  • About, team and profile, process, journal, FAQ with search, contact with a map and the PHP form, account pages, coming soon with a countdown, 404
  • Fully responsive from 390 px to wide screens
📄 30 HTML files

Getting Started

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

1. Open locally

Unzip the downloaded package and open posea/index.html in any modern browser (Chrome, Firefox, Edge, Safari). No build tools or server are required — the quote, the booking calendar, the filters and the proofing all work straight from the files.

2. Deploy to a server

Upload the contents of the posea/ 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 shoot types, the rates, the usage factors, the team, the calendar, the clients, the stories, the tear sheets and every photo’s focal point live in one place — see Rates, Quote & Booking.

Tip: Replace the neutral placeholder images in assets/img/ with your own photography at the same dimensions, then set each photo’s focal point in the data block so the Crop Out reveal and the focus squares open on its detail.

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 Studio (the cover builds round the portrait), Campaigns (transparencies under a loupe), Beauty Editorials (the spread opens across its gutter)
work.htmlEvery story with type tabs, a client and a year select, search and a count
gallery.htmlA masonry gallery of frames in a lightbox, colour or black and white
project-details.html / project-details-2.html / project-details-3.htmlThree story layouts: big images, a wide slider, a small masonry beside the story; credits, tear sheets, previous / next
clients.html / client-details.htmlEvery client A to Z with its stories and tear sheets; one client’s page
tear-sheets.htmlCovers and editorial pages drawn as magazine pages, by magazine, year and page type
services.html / service-details.htmlThe six shoot types with day and half-day rates; one shoot type in full
rates.htmlThe rate card, the quote engine with its summary, and how a quote adds up
booking.htmlBook A Shoot in six steps: shoot, a free day on the live calendar, the brief, the team, details, review
process.htmlHow a shoot runs in six steps, with retouching questions
proofing.htmlA client’s proofing gallery: picks against the included images, extra retouches priced by level
about.html / team.html / team-details.htmlThe photographer, the team and one team profile
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 the live line, the form, studio hours, the next free days and a map
account.html / login.html / register.html / forgot-password.htmlThe client area (enquiries, saved quotes, proofing and invoices, details) and the login pages
coming-soon.html / 404.htmlCountdown to the daylight room, error page
sendmail.phpAJAX mail handler for the contact and comment forms (see Contact Form)
assets/css/style.cssAll custom styles, numbered Table of CSS (16 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 (34 blocks)
assets/js/plugins/jQuery, Bootstrap, Swiper, Fancybox, GSAP, ScrollTrigger
assets/img/Images, one folder per section (see Images)
assets/fonts/theme-icons/The sun and moon of the theme switch, loaded locally
assets/webfonts/ + assets/css/fontawesome-all.cssFont Awesome Free, loaded locally

Folder Structure

The package unzips to two folders: Documentation/ (this guide) and posea/, the template. Every page sits in the template’s root; everything the pages load sits under assets/:

posea/
├── *.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
    ├── js/
    │   ├── main.js                     all custom scripts, numbered JS INDEX (34 blocks)
    │   └── plugins/                    jQuery, Bootstrap, GSAP, ScrollTrigger, Swiper, Fancybox
    ├── fonts/
    │   └── theme-icons/                the sun and moon of the theme switch
    ├── webfonts/                       Font Awesome Free font files
    └── img/                            images, one folder per section
        ├── cover/                       1 files
        ├── flags/                       6 files
        ├── icons/                       32 files
        ├── logo/                        4 files
        ├── mast/                        10 files
        ├── menu/                        3 files
        ├── photo/                       20 files
        ├── team/                        6 files
        └── work/                        79 files

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

Ink--po-ink
Coral--po-coral
Rouge--po-rouge
Panel--po-panel
White Ground--po-bg
Powder Band--po-band
Plate--po-plate
Field--po-field
Heading--po-heading
Body--po-text
Hairline--po-line
Night--po-night

The site is white and black, and the colour comes from the photographs. Ink is the headings, the square buttons and the coal bands; the powder band alternates with white. The lipstick is the one accent: coral for the large marks (the preloader’s stroke, the crop corners, the focus squares, the swipe under a title) and rouge for buttons on hover, prices in links and small text. --po-bg, --po-band, --po-surface, --po-heading and --po-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: Dosis (headings, navigation, eyebrows, buttons and figures in thin, tracked capitals) and Castoro (the body and the grey italic lead under every title). Swap them by editing the Google Fonts link and the --po-ff-head / --po-ff-body variables.

Logo

The logo is POSEA in thin, tracked Dosis capitals whose A has a lipstick swipe for its crossbar. 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 coal bar, in the dark theme and the footer
  • mark-light.png — the swiped A alone, white (the account, coming-soon 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

Posea 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 posea-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--po-bg
Dark Band--po-band
Dark Surface--po-surface
Dark Heading--po-heading
Dark Body--po-text
Rouge On Dark--po-accent-text
  • Tokens — the dark values sit in one block, [data-theme="dark"] { … }, right after :root in style.css.
  • Bands that stay dark — sections with the class is-night (the quick quote, the campaigns, the light table, the film, the retouching levels, the footer) are dark in both themes.
  • Icons and mastheads — each line icon and masthead 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.

Rates, Quote & Booking

The figures on every page come from one data block, JS block 09 Posea Data near the top of main.js (var POSEA). Edit it once and the rate card, the shoot pages, the quote, the booking, the proofing and the client area follow. Prices are in euros (the currency switch converts them); times are minutes after midnight (540 = 9:00); weekdays run 0 = Sunday to 6 = Saturday.

currencyEuros, pounds and dollars with their symbols and rates to the euro.
hours / calendarThe studio’s hours for each weekday, and the booking calendar: 40% of shoot days booked and 15% on hold by a seeded rule, nothing bookable within 2 days, 75 days ahead.
vat / deposit / rushVAT 20%; a 30% deposit holds the date; rush delivery adds 25% of the retouching.
shootsEach shoot type’s day and half-day rate, the looks and retouched images a day and a half day include, the price of an extra look and the usage it starts at.
retouch / usage / extrasThe three retouching levels by the image; the usage factors for media, territory and term; the team and the studio by the day or the half day.
clients / stories / tearsheets11 clients, 14 stories with their type, field, date, frames and credits, and 12 tear sheets with their issue and cover lines.
team / proofingThe team; the proofing gallery’s shoot and frames.
focusThe focal point (x %, y %) of each of the 105 photographs: the Crop Out reveal opens on it and the focus squares and the loupe stand on it.

The shoot types

Beauty Editorial€2,400 a day, €1,450 a half day · 6 / 3 looks · 8 / 4 retouched images · €150 an extra look · usage from Editorial Only
Fashion Editorial€2,600 a day, €1,550 a half day · 8 / 4 looks · 10 / 5 retouched images · €140 an extra look · usage from Editorial Only
Beauty Campaign€4,200 a day, €2,500 a half day · 5 / 2 looks · 6 / 3 retouched images · €380 an extra look · usage from Web & Social
Fashion Campaign€4,800 a day, €2,900 a half day · 8 / 4 looks · 8 / 4 retouched images · €420 an extra look · usage from Print & Point Of Sale
Lookbook & E-Commerce€2,200 a day, €1,300 a half day · 30 / 15 looks · 30 / 15 retouched images · €45 an extra look · usage from Web & Social
Talent Portraits€1,600 a day, €950 a half day · 4 / 2 looks · 6 / 3 retouched images · €120 an extra look · usage from Web & Social

How a quote adds up

The creative fee is the day rate times the days (or the half-day rate). Looks over what the shoot includes cost the shoot’s extra-look price; retouched images over what it includes cost the chosen level, and a finer level also upgrades the included images. Rush delivery adds 25% of the retouching. The usage licence is the creative fee times the media, territory and term factors (editorial use is always included). The team and the studio are added by the day or the half day; VAT goes on top; the deposit is 30% of the total.

Natural€45 an image — Colour, clean-up, stray hairs
High-End Beauty€95 an image — Skin by hand, frequency separation, dodge and burn
Composite€160 an image — Several frames or backgrounds combined
MediaEditorial Only × 0, Web & Social × 0.4, Print & Point Of Sale × 0.6, Out Of Home × 0.9, All Media × 1.4
TerritoryOne Country × 1, Europe × 1.5, Worldwide × 2.2
Term6 Months × 0.7, 1 Year × 1, 2 Years × 1.6, 5 Years × 2.5
Team & studioHair & Make-Up Artist €650 / €400, Stylist €700 / €420, Manicurist €380 / €240, Producer €550 / €330, Digital Technician €450 / €280, Studio Hire, Paris 3e €900 / €540, Casting Session €350 flat
Worked examples: a beauty editorial day with editorial use is €2,880 with VAT (€480 VAT), a €864 deposit. Two beauty campaign days with 14 looks, 16 retouched images at High-End Beauty, rush delivery, a two-year print licence in Europe, a hair & make-up artist and a casting: Creative fee €8,400; 4 extra looks €1,520; 4 extra images, High-End Beauty €380; High-End Beauty on 12 included €600; Rush delivery €380; Usage: Print & Point Of Sale, Europe, 2 Years €12,096; Hair & Make-Up Artist €1,300; Casting Session €350 — subtotal €25,026, VAT €5,005.20, €30,031.20, deposit €9,009.36.

The booking calendar and the live line

Each shoot day’s state comes from a seeded rule on the date, so every page and every visit agrees; the header’s live line says whether the studio is on set, open or closed and names the next free shoot day. Replace dayStatus() in block 10 with a call to your own calendar to show real bookings; the booking, the free-days strips and the live line all read from it.

Client proofing

The proofing gallery counts the client’s picks against the images their shoot includes (6 here) and prices every pick over that number at the chosen level, plus the level’s upgrade on the included picks: two picks over at Natural (€45 an image) cost €90; at High-End Beauty (€95) the two extra and the upgrade come to €490.

Saved quotes, booking enquiries and proofing picks are kept in the browser (localStorage) so they follow the visitor from page to page and show in the client area; the booking and the proofing confirm on screen with a reference — connect them to your own systems to take real enquiries. The quote engine is block 23.

WebGL & Motion

Two small WebGL shaders draw the moving layers: the Moiré — two fine line screens a few degrees apart, turning against each other so their interference throws soft fringes, held to the two edges of the page titles and night bands — and the monogram in the footer, the swiped A drawn on a canvas and pixel-sorted: rows of its brightest pixels run out into streaks and sort back into the crisp mark. Each is one canvas:

<canvas class="po-gl" data-gl="moire" aria-hidden="true"></canvas>
  • Colours — each layer reads its colours and strength from CSS variables on its canvas or section: --gl-1, --gl-2 and --gl-alpha. The theme switch repaints them.
  • Performance — a layer only runs while its section is on screen and the tab is visible. Visitors who prefer reduced motion get one still frame.
  • Remove one — delete the canvas; nothing else depends on it.

Reveals and hover

Add po-crop to a photo’s frame and it opens on a tight crop of its focal point, coral crop corners riding the edge, then widens to the full frame (block 04). po-words on a title makes its words rise from their own masks; po-fade lifts text into place; data-delay="0.2" staggers any of them. po-dodge on a photo frame gives it the dodge-brush hover: a soft circle of light brushes across the photo and lifts it a little.

RTL (Right To Left)

Posea 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 posea-lang and posea-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
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 34 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 Lipstick Swipe preloader, the header, the Crop Out reveals and word rise, the theme and direction switch and the WebGL layers.
  • 09–10 — Posea Data, Studio Live. Posea Data holds every figure; Studio Live works out the booking calendar and the studio’s live line from the visitor’s own date and time.
  • 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 Cover, The Light Table, The Spread. The three home pages’ scroll moments.
  • 23–34 — Quote Engine, Booking Wizard, Work Filters, Client Proofing, Tab Sets, Contact Form, Account Forms, Client Area, Article Tools, Demo Forms, Launch Countdown, FAQ Search. The feature pages: the quote engine, the booking wizard, the work and tear-sheet filters, client proofing, tabs, contact, 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.

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/cover/The Home 01 cover’s cut-out portrait (transparent PNG) — 1 file: 600×800
img/flags/The language picker’s flags (SVG, included) — 6 files: SVG
img/icons/Line icons, each in an ink and a white version (included) — 32 files: 128×128
img/logo/Logo, light logo, the swiped A and the favicon (included) — 4 files: 747×155, 64×64, 323×301
img/mast/The client magazines’ mastheads, white and ink (included) — 10 files: 507×96, 376×135, 606×125, 581×118, 547×117
img/menu/Home previews in the mega menu — 3 files: 560×350
img/photo/Single photographs: heroes, bands, the process, the journal — 20 files: 1382×976, 600×600, 1386×1386, 800×1210, 1373×2830, 688×784, …
img/team/The team, square portraits — 6 files: 600×600, 1049×1049, 962×841
img/work/The stories, frame by frame (story-1.jpg is the cover frame) — 79 files: 800×735, 1300×794, 1300×960, 800×520, 928×600, 800×749, …

The logo files, the line icons, the mastheads 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, proofing, account, login, register and forgot-password forms are demo forms: they confirm on screen and are ready to connect to your own systems. To activate the mail handler on your server:

1. Set your email address

Open sendmail.php and replace the placeholder recipient at the top of the file with your own address:

$email = 'example@example.com';

2. Upload to a PHP host

The form needs a server with PHP mail() support (virtually every shared host). It will not send from your local computer or from a static-only host — there the form shows a friendly “upload to a PHP-enabled host” notice instead.

3. Optional: enable Google reCAPTCHA v3

Invisible reCAPTCHA v3 spam protection is already built into the handler. It stays dormant until the form submits a token — that is why no badge or checkbox appears out of the box. To switch it on:

  • Create v3 keys (a site key and a secret key) for your domain in the Google reCAPTCHA admin console
  • In sendmail.php, replace YOUR_RECAPTCHA_V3_SECRET_KEY with your secret key
  • In contact.html, add a hidden token field inside the form and load the reCAPTCHA script with your site key just before </body>:
<!-- inside the form -->
<input type="hidden" name="g-recaptcha-response" id="g-recaptcha-response">

<!-- before the closing </body> tag -->
<script src="https://www.google.com/recaptcha/api.js?render=YOUR_SITE_KEY"></script>
<script>
  grecaptcha.ready(function () {
    grecaptcha.execute('YOUR_SITE_KEY', { action: 'contact' }).then(function (token) {
      document.getElementById('g-recaptcha-response').value = token;
    });
  });
</script>

Once the token field is present, sendmail.php verifies every submission with Google and rejects low-score (bot) requests.

Credits

This template is built using the following open-source libraries and resources.

  • Bootstrap 5.3.3
  • jQuery 3.7.1
  • Swiper 11
  • GSAP 3 + ScrollTrigger
  • Fancybox 3.5
  • Font Awesome Free
  • RTLCSS
  • Google Fonts: Dosis, Castoro

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.