Thirty-four carats · blue-white · three minutes of dark

The PembrokeFile

The investigator who worked the claim filed nothing for three weeks, then vanished — leaving his case file locked in the cabinet by the window. Five drawers. Five locks. Every answer is written somewhere in the room.

1HTML file
0Dependencies
0Network calls
5Locked drawers
17Moves, minimum
130KBTotal weight
Anatomy of the case

Five drawers, five mechanisms

Each lock is a different kind of problem, and each one is a different piece of engineering. The story is on the left. What it took to build is on the right.

01

Brass dial

Three figures, all of them printed on the insurer's own bulletin. The combination was never hidden — it was filed.

Underneath

Pointer-driven rotary input with angular snapping and tolerance, plus a full keyboard path — arrow keys step the dial, so the puzzle is solvable without a mouse.

02

Torn page

His reconstruction of the route, torn apart by somebody who wanted the case closed. Reassemble it and four bypassed alarms line up.

Underneath

Fragment layout with drag, drop and edge-matching tolerance on pointer events, so it behaves the same under a mouse, a finger and a stylus.

03

Jammed card tray

A canvass card sits marked in a tray that no longer slides. Free it and the tray releases the slip the wire board is waiting for.

Underneath

A sliding-block board generated and then verified by breadth-first search before shipping — seventeen moves at best, measured rather than guessed. Both boards were checked the same way.

04

Dead desk lamp

He left the junction box in pieces so nobody could read his desk at night. Rebuild the circuit and the light comes back.

Underneath

Verlet integration on canvas: each bead in the wire keeps its previous position, so velocity emerges from the positions themselves and the cable hangs and swings like cable.

05

The pencil rubbing

He wrote the name once, bore down hard, and took the sheet with him. Shade across the pad and the impression lifts out light against the graphite.

Underneath

Canvas compositing that accumulates shading under the pointer and reveals the indentation by difference — the last name in the file was never filed at all.

What you can't see while playing

The part that took the time

Most of the work in this file is invisible by design. If it were visible, it would be a bug.

Verified, not guessed

Both puzzle boards were searched

A sliding-block puzzle that is accidentally trivial is worse than no puzzle. Each board was generated and then run through a breadth-first search offline, so the stated minimum is a measured fact and the route is known to exist.

No audio files

Every sound is synthesised

The drawer slides, the dial clicks and the case-closed flourish are all generated at runtime through the Web Audio API. Nothing is downloaded, because there is nothing to download.

Playable without a mouse

Keyboard paths for all five

Every puzzle has a keyboard route to its solution, not just a focus outline. Reduced-motion preferences are honoured throughout, and progress survives a closed tab through local storage.

One file, no build

Nothing to install, nothing to break

No framework, no bundler, no package manifest, no build step. The only external reference in the entire document is the SVG namespace declaration — it makes no network calls at all, so it runs offline and will still run in a decade.

The cabinet by the window

Read the case yourself

It opens in a browser, on a phone or a desktop, and it remembers where you stopped. There is nothing to install and nothing to sign up for.