LANTHORN
The page is a dark stage and the content is the printed matter lying on it — playbill, ticket stubs, call sheet, receipt roll. It also publishes the sightline of all 412 seats, including the rows that lose the top of the set.
Open live preview ↗
Overview
The page is a stage, not a sheet of paper
Almost every theme puts ink on paper: a pale ground, text on top. This one inverts it. The ground is a dark bottle-green stage, and the content is the printed matter a theatre actually produces, lying on it — the pasted playbill, a strip of torn ticket stubs, a typed call sheet, the roll off the box office printer. Four stocks, each with its own tooth, edge and shadow.
That inversion does the work a stylesheet usually does. There are no dividing rules in the layout, because an object separates itself from the ground by having an edge; there is no grid of equal cards, because paper does not stack in equal rectangles; and there is no single accent colour, because a playbill is printed in four inks. The perforations, the torn bottom edge and the paper tooth are CSS masks and gradients, not images.
LANTHORN is for a producing repertory company — a theatre that carries three or four plays at once and turns them over between a Wednesday matinée and a Thursday evening. Almost every theatre theme on the market assumes the opposite: one production, one run, one set of dates. This one is built the other way round, and it takes the seating plan seriously enough to compute it.
The house, computed
One table of dimensions — stage size and height, upstage wall, gallery leading edge and soffit, row pitch, first-row elevation and rake per bank — produces every figure the site states about every one of its seats. Pick a seat and it tells you how far you are from the stage edge, how steeply you look down, how far off the centre line you sit, how many millimetres of clearance you have over the head in front, and how much of a tall set the gallery takes off the top.
The clearance figure is the C value theatre consultants use, from the constant-C rake construction z(n) = z(n-1) · y(n) / y(n-1) + C. The overhang figure comes from extending the sightline ray over the gallery soffit to the upstage wall. Change one dimension in the Customizer and all 412 seats recompute — including the sentences the page writes about them.
It publishes the bad seats
The demo house has two faults it cannot design out, and the theme states both. Rows B and C sit on the flat: their clearance is negative — −179 mm and −118 mm — so the front edge of the stage floor sits behind the head in front of you. Rows K, L and M sit under the gallery and lose 0.9, 2.1 and 3.0 metres off the top of a tall set. Both are consequences of the geometry, not opinions, and the plan marks each affected seat individually.
One consequence the site prints in as many words: for a tall set, the cheapest seats in the gallery see more of it than the dearest seats in the rear stalls. That sentence only appears when the geometry still supports it. Change the house and it disappears rather than becoming a lie.
Sightlines that know which play they are describing
Tick “tall set” on a production and the seating plan on that production’s page warns the seats under the gallery, with the metres each one loses. On a play with a low set it stays quiet, because for that play the overhang genuinely does not matter.
A rotation, not a run
A performance is a record. The run dates, the performance count, the previews, the access performances and the overlap bars on the front page are all read from those records. No production carries an opening date or a closing date as a field — a field is a number somebody has to remember to change, and one day they will not. Three bars sharing the same nine weeks is what the word repertory means, and the front page draws it.
Captioned, BSL-interpreted, audio-described and relaxed performances live in the same calendar as everything else, marked. Access provided, rather than access advertised on a separate page.
The ghost light
A ghost light is the bare bulb a theatre leaves burning on an empty stage overnight. Here it stands on the boards beside the playbill, rendered live in WebGL2: real inverse-square falloff, a 24-step single-scattering integral through a haze volume, a Lambertian floor, and an 8×8 ordered dither so the gradient does not band on an 8-bit display.
The drawn lamp and the rendered light are the same object. The light’s position is read from the drawing’s own bounding box every frame it could have moved — including after the display face swaps in and pushes the lamp down the page, which is exactly when a hard-coded coordinate comes apart. The composite ceiling is derived rather than guessed: it keeps chalk text at 4.83:1 at the centre of the brightest pool.
Built to a contrast budget, not fixed after
The poster orange measured 2.96:1 and would have failed at every size, so it was split into three tokens before anything was built on it: a glow value used only as light, a display value at 3.96:1 for type at 24 px and above, and an ink value at 5.36:1 for body text and links.
Also included
- 412-seat plan built from real buttons, arrow-key navigable across and between rows, with the readout rendered by the same function on the server and over AJAX so the two cannot drift apart.
- Company pages, journal, diary, pages, search, 404, comments, RTL stylesheet, editor and admin styles, 263-string translation template.
TheaterEventstructured data per performance — not oneEventfor a whole run, which is what makes a repertory calendar unusable in search results.- Idempotent demo importer that regenerates its schedule relative to the day you run it, so the calendar is never full of last year’s dates.
- Zero third-party JavaScript. No tracker, no external font host, no analytics. Nothing about a visit leaves the server.
What's included
- Full theme source — every template, style sheet & script
- One-click demo importer (idempotent, no page builder)
- Live Customizer controls for copy, colours & content
- Translation-ready .pot file + RTL stylesheet
- HTML documentation + a CHANGELOG file
- Lifetime updates + 6 months support (renewable)
Specifications
| WordPress | 5.6 – 7.0 |
|---|---|
| PHP | 8.0 – 8.3 |
| Browsers | Chrome, Firefox, Safari, Edge (latest) |
| Layout | Fully responsive, mobile → desktop |
| Localization | Translation-ready · RTL included |
| Accessibility | Keyboard-navigable · prefers-reduced-motion |
| Page builder | Not required — native Customizer |
| License | GNU GPL v2 · single-site commercial |
Release
The complete, dated version history ships in the theme’s CHANGELOG file. Every purchase includes lifetime access to future updates.