← The library

Elowen

Portfolio site for a photographer and filmmaker

Full template Members only Open the demo Unlock the library
Preview of the Elowen template: a full-screen photograph of a photographer framing desert mountains at sunrise, crossed by a prism of light, with the wordmark “Elowen” bleeding off the bottom edge.

0 external requests, 0 dependencies, 0 build steps

12 animations lifted from the reference's animation engine

−0.1% total height against the reference site

What it is

A photographer's portfolio, complete: a full-height opening window with a loading choreography, a sticky introduction the portrait scrolls past, three photo series whose prints fan out as you scroll, one film in a frame that tilts towards your cursor, and a giant e-mail address crossed by prisms. One page, one HTML file.

The design follows that of a commercial template. Nothing of its media has been kept: the twelve photographs were regenerated, the background video was replaced by a CSS gradient, and the two prism images of the contact section are now a masked gradient. All the code was rewritten — the original shipped 120 kB of minified CSS, 1.4 MB of bundles, a proprietary animation engine and an e-commerce basket that calls a non-existent API as soon as you leave the tool.

That's the whole point: this template isn't here to be admired, it's here to be read, broken and rebuilt.

What you change first

The name — three places

The wordmark is text, not an exported SVG: the brand of the navigation bar, the <h1> of the opening window and the <title>. If your studio name is longer or shorter than “Elowen”, nudge --wordmark (37.3 vw for six letters) until the word fills its box. No CSS class carries the brand name.

The spectrum — one gradient

Right at the top of assets/css/style.css:

--spectrum: linear-gradient(270deg,
  #2b3fa8, #2f8fd0 19%, #17936f 44%, #f4b53c 67%, #e2453c 89%);

One thing to grasp before touching anything else: the site has no flat accent colour. Its signature is this prism, and it is used three times — smeared to 50 px of blur behind the series titles, tilted across the opening window in colour-dodge, and masked into two rings in the contact section. Change it once, and all three change together.

The sizes

Six steps, --h1 to --h6, declared once then redeclared at 991, 767 and 479 px. A heading never gets its own media query: change --h3 and every section title on the page follows.

The twelve effects, and how they're built

All taken from the data of the original's animation engine — 150 events on this page, pulled out of the store then deduplicated down to 69 distinct animations, of which 18 actually apply to this page. Grouped here into twelve effects, with the original's own durations, curves and delays.

EffectWhereHow
Loading choreographyopening windowfive photos rise 60 vh, straighten over 500 ms, then the middle one scales ×12 over 1300 ms
Text rising into vieweverywhere+100%, 16° tilt and 10 px of blur → 0, fired 15% up from the bottom of the screen
Portrait parallaxintroduction−10% → 13% inside a frame 20% taller than itself, smoothing 80
Prints fanning out3 seriestwo cards travelling on four channels each, everything landing at 55% of the scroll
Frame tiltingfilmrotateY ±5°, rotateX ∓5°, the photo sliding the other way; perspective on the parent, rotation on the child
E-mail arrivingcontactthe address flies in from 100 vw, two prisms grow and turn 279°, a shadow copy slides out from behind
Button hovereverywherea white panel parked one height below slides up, the label turns black and blurs for a fifth of a second
Wordmark hovernavigationa 3 px ripple out of focus and back
Dropdownsnavigationhover and keyboard focus, in CSS alone, with a 200 ms closing delay to cross the gap
Full-screen menunavigationa checkbox, unrolled with clip-path
Light leakopening windowa blurred spectrum in colour-dodge, drifting over 24 s
Film grainwhole pagean SVG turbulence tile inlined in the stylesheet, 0.4 kB

What you should know

  • No external requests. Everything is local: fonts, photographs, scripts. The original loaded five bundles from two domains.
  • Scroll reveals can't hide the content. The hidden state only exists once the JavaScript has run. Checked by removing the <script>: 6 headings out of 6 stay visible, 0 blocks hidden, and the opening window is already assembled. The original, meanwhile, set style="opacity:0" on every animated block.
  • Zero inline styles, zero inline scripts. The template honours the site's strict security policy — the very one that style="opacity:0" breaks.
  • The trigger sits 15% up from the bottom of the screen, measured on the screen and not on the element: a threshold given as a share of the element would leave anything taller than the screen hidden forever.
  • Accessibility: skip link, menu state announced, decorations hidden from screen readers, one visible focus ring, animations switched off if the system asks — delays included.
  • Responsive checked at 390, 479, 767, 991, 1440 and 2560 px, on load and after scrolling all the way down, with no horizontal overflow.

What isn't perfect

Better said here than left for you to find out.

  • The background video was not remade. The original serves a 4 MB clip of light through a prism, blended in colour-dodge. It is replaced by a CSS gradient with the same blend and a slow drift: the gesture is the same, the weight goes from 4 MB to nothing. It is a steadier light than real footage.
  • The e-commerce basket has been removed. Outside its original tool it called a non-existent API. The “Prints” entry opens an order e-mail instead.
  • The original has several pages — about, process, shop, three home variants, three contact variants. Everything is folded into anchors of the single page, and the navigation keeps two of the four dropdowns: the two with a real destination.
  • The four small photos and the second card of each series disappear below 992 px, as in the original: on a narrow screen they would land on top of each other.
  • The opening sequence runs for three seconds before the wordmark arrives. That is long, and it is the original's own timing.
  • The wordmark is six letters where the original had ten. Measured side by side, the two baselines are five pixels apart and the word fills the same width — but the letters are necessarily taller, and “Elowen” has no descender to hang below the frame. Same cause for the introduction heading, which wraps onto one line fewer below 992 px.
  • The film has no player: the frame is a link. Wiring a <video> or a dialog takes about twenty lines.

It’s waiting for you in the library.

Elowen comes with the subscription, alongside the rest of the library and the full course.

Immediate access · No commitment · Cancel in one click