# Design Language for haskell.quest

## Aesthetics and Tone

haskell.quest is **a wabi-sabi tea-house for lazy evaluation** — a quiet, centered, slightly-faded room where the visitor is invited on a contemplative *quest* through the ideas of a purely functional language, narrated in a **nostalgic-retro** voice that remembers learning Haskell from a worn paperback under a desk lamp. The domain reads "haskell — quest": not a product page, not a tutorial index, but a slow pilgrimage through laziness, purity, types, and the strange serenity of a language where nothing happens until you ask for it.

The governing metaphor — and it is load-bearing, not decorative — is that **a lazy language's unevaluated value (a "thunk") looks exactly like a skeleton-loading placeholder**. In Haskell, `take 5 [1..]` produces an answer even though `[1..]` is infinite, because the rest of the list is never forced. So this site renders **every not-yet-needed thing as a shimmer block** — a soft burgundy-on-cream pulse where a definition, a code sample, an image, a paragraph *could* be — and only resolves it into real content when the visitor's attention (scroll position, hover, dwell time) "forces the thunk". The corpus's `skeleton-loading` pattern sits at a thin 3%; here it is not a loading state, it is **the entire epistemology of the page**. The visitor watches values get demanded into existence.

The aesthetic seed is **wabi-sabi (2% in the aesthetic corpus — almost untouched), realised through a centered layout (83% — the one crowded slot in the seed, so it is reframed: not "centered hero", but a single narrow scroll-column like a hanging scroll / kakemono, edges left raw), display-bold typography (7% — claiming sparse territory), a burgundy-cream palette (3% — the rare claim, the most distinctive colour element of the seed), skeleton-loading patterning (3% — used as the site's core mechanic, not a spinner), 3d-render imagery (used for soft clay vessels, never glossy product shots), flowing-curves motifs (5% — the asymmetric brushstroke contour, never a perfect circle), and nostalgic-retro tone (3% — the remembered-paperback voice).** This eight-axis combination has not been claimed elsewhere in the read references.

The mood is **a worn ryokan room at dusk, lit by one lamp, with a single chipped tea-bowl and a 1990s programming textbook open on the tatami**. Wabi-sabi on the web has metastasised into a kitsch shorthand — beige gradients, generic "imperfect" wonky borders, a stock photo of a Japanese maple, a pull-quote about transience attributed to nobody — and haskell.quest deliberately strips all of that out. There are no maple leaves. No bamboo. No enso circles drawn with a calligraphy SVG filter. No "less is more" epigraph. Wabi-sabi here is reduced to its three actual ingredients: **(a) asymmetry and the deliberately unfinished — content that arrives incomplete and stays a little incomplete; (b) the texture of age — paper grain, mended cracks (kintsugi seams in pale gold), faded ink; and (c) a tight earthen palette of burgundy and cream that never brightens, never neons, never glows.** Everything the corpus calls "wabi-sabi" beyond that is treated as forbidden.

The voice — **nostalgic-retro** — is the second load-bearing decision. The narration speaks like someone who learned Haskell a long time ago and is fond of it the way you are fond of a first programming book whose spine has cracked. Sentences are unhurried. The page remembers things ("there was a time when the answer to *what is a monad* was a 40-message thread; here it is a tea-bowl"). There is **no call-to-action. No "get started". No pricing. No "join the community". No testimonials. No stats grid. No FAQ accordion. No newsletter field.** The visitor reads a pilgrimage; the narrator is the fond elder; the quest ends and the lamp is turned off.

Closest emotional reference points: the typesetting of *The Little Schemer* / *Simon Peyton Jones' "Implementing Functional Languages"* read at 1am; the patina of a much-handled `:type` prompt in a green-on-cream terminal screenshot from 1998; the stillness of a Sōetsu Yanagi essay on the unknown craftsman; the colour of dried sumac and unbleached rice paper. The aesthetic is **earthen, not muddy. Faded, not dull. Retro, not ironic** — the narrator does not wink at the past, they simply still live near it.

## Layout Motifs and Structure

The site is a **centered single column** — but reframed entirely away from the "centered hero + card grid" default that dominates 83% of the corpus. Here "centered" means **one narrow vertical scroll, 62ch wide at maximum, hung in the middle of a wide cream field like a kakemono (Japanese hanging scroll)** — the field on either side is intentionally empty, slightly textured paper, no sidebar, no decoration, just *ma* (negative space) that makes the column read as a single mounted artefact. There is no second page. There is no router. There is no nav bar, no hamburger, no footer menu. The visitor lands at the top of the scroll and descends.

**The scroll is divided into seven "stations" of the quest**, each a self-contained passage that begins fully as skeleton blocks and resolves as the visitor arrives:

1. **Station 0 — The Empty Bowl (the opening).** The display-bold wordmark `haskell.quest` sits centered, but it *boots in as a skeleton wordmark first* — a shimmer block the exact size of the word — and resolves into real letterforms over 1.8s, character by character, slightly out of vertical alignment with one another (asymmetry). Below it, a single line of nostalgic narration and one 3d-rendered clay tea-bowl, off-centre, casting a soft long shadow into the cream.
2. **Station 1 — Nothing Happens Yet (laziness).** A passage on lazy evaluation. The body text arrives as three skeleton paragraphs; as the visitor scrolls past 30% of the section, the first paragraph "forces" (shimmer → text). The second forces at 60%, the third at 90%. A code sample `take 5 [1..]` sits in a recessed cream panel; the right-hand side of the result list is *still skeleton* — five real numbers, then `…` then shimmer that never resolves, because that part of the list is never demanded.
3. **Station 2 — Pure Water (purity & referential transparency).** A passage on pure functions. A 3d-rendered shallow clay dish of still water, rendered with no caustics, no glints — matte. The text explains that a pure function, called twice, returns the same answer; to demonstrate, a small inline widget shows `double 21` written twice — and the *second* call is rendered as a skeleton that, when hovered, resolves to the identical `42`, then fades back to skeleton, then resolves again — the value is always the same, so the page treats it as cheap to re-summon.
4. **Station 3 — The Mended Crack (types & the kintsugi seam).** A passage on the type system. Whenever a type signature is shown (`map :: (a -> b) -> [a] -> [b]`), it is drawn as if it were a *kintsugi seam* — a pale-gold flowing curve threading the cream, with the signature set along it in display-bold. The narration: types are the gold in the cracks; the program was broken and the compiler mended it visibly. The seam is an asymmetric flowing curve, never a straight line, never a perfect arc.
5. **Station 4 — A Tea-Bowl, Not a Burrito (the monad station).** The site's small joke and its centrepiece. A large 3d-rendered chawan (tea-bowl), centered, slightly tilted, with a single faint kintsugi seam. The narration retells the famous "what is a monad" struggle in a fond, retro register, then declines to define it formally — instead it shows three short, real Haskell snippets (`Maybe`, list, `IO`) as actual code, each preceded by a skeleton that the visitor must dwell on for 1.2s before it resolves, "because understanding monads, like tea, should not be rushed".
6. **Station 5 — Folding the Paper (recursion & folds).** A passage on `foldr` / `foldl`. A 3d-rendered sheet of slightly creased rice paper that, on scroll, folds itself in stop-motion-ish steps — each fold is a flowing curve, never a hard crease — while a `foldr (+) 0 [1,2,3]` expansion writes itself out term by term, each term arriving from skeleton.
7. **Station 6 — The Lamp Goes Out (the closing).** The narrator signs off. The 3d tea-bowl from Station 0 reappears, now empty and dimmer. The final line of narration resolves from skeleton one last time, and then — deliberately — **one short skeleton block at the very bottom never resolves at all.** It is the part of the quest that is yours to force. Below it, in small display-bold caps: `— end of the demanded portion —`.

**Composition discipline.** The column is centered, but *content inside it is not*. Headings sit flush-left or are nudged 8–24px off-axis. The 3d vessels are always off-centre, casting their shadow toward the column's centre. Section gutters are large — 200px — pure cream. The visual rhythm is: tall skeleton silence → a value forced → a vessel → silence again. **No card grid. No bento. No two-column anything. No carousel. No tab strip.**

**Scroll behaviour.** Native scroll, the visitor's pace. No scroll-jacking, no snap. The only scroll-coupled mechanic is the *forcing* of skeleton blocks via `IntersectionObserver` thresholds — and once forced, a block stays forced (a thunk, once evaluated, stays evaluated; this is also why nothing "re-shimmers" on scroll-up, except the two intentional demonstrations in Stations 2 and 4).

## Typography and Palette

**Fonts — Google Fonts only, three voices.**

- **`Bricolage Grotesque`** — *the load-bearing display-bold face*. A contemporary expressive display grotesque available on Google Fonts, with optical-size and weight axes; here it runs at **wght 700–800, opsz at its display end**, used for: the wordmark `haskell.quest`, all seven station titles, the pull-lines of narration, the `— end of the demanded portion —` sign-off, and every code keyword shown in prose. Station titles are set at `clamp(40px, 7vw, 88px)`, tracked slightly tight (`letter-spacing: -0.01em`), and each title's baseline is deliberately *not* level — successive letters drift ±2px vertically (asymmetry / the unfinished). This is the typographic centre of the site.
- **`Newsreader`** — the nostalgic-retro body voice. Newsreader is a Google Fonts variable serif with a warm, slightly old-fashioned newspaper-revival character; here it runs at **opsz 16–24 / wght 400 / italic permitted but rare**, used for every block of narration in the seven stations. Body is 19px Newsreader, line-height 1.72, set ragged-right (never justified), in `#2A0F14` warm ink on `#F4EAD9` cream. Emphasis is given by *italic*, never by bold (bold belongs to Bricolage). Set in the fond-elder register: full sentences, gentle, remembering.
- **`Spline Sans Mono`** — the code voice. A Google Fonts monospace with a soft, slightly humanist character (it does not look like a 1980s terminal — it looks like code typeset in a nice 1990s textbook). Used for every real Haskell snippet, type signature (when *not* set along a kintsugi seam — those use Bricolage along the curve), and `ghci`-style prompt. 17px, line-height 1.6, in `#5C1A24` muted burgundy on a recessed `#EDDFC9` panel that is one shade darker than the page so code reads as *pressed into* the paper.

The trio — **`Bricolage Grotesque` (display / structure) + `Newsreader` (nostalgic narration) + `Spline Sans Mono` (code)** — is, by inspection of the read references, an unclaimed pairing; the corpus's display-bold slot is usually filled with Bebas or oversized geometric sans, not an expressive variable grotesque, and Newsreader rarely co-occurs with a display grotesque in a wabi-sabi frame.

**Palette — burgundy-cream (3% in corpus — claimed), nine earthen values, nothing brighter than the cream and nothing glossier than dried clay.**

- `#F4EAD9` — **Unbleached Rice Paper.** The page background and the wide empty side-fields. Warm, faintly grey-yellow, never pure white. Carries a 4–6% paper-grain noise overlay everywhere.
- `#EDDFC9` — **Pressed Paper.** One shade darker than the page; the recessed background of code panels and quoted passages, so they read as impressed into the sheet.
- `#5C1A24` — **Dried Sumac.** The primary burgundy. Code text, station-title fill, the wordmark. Deep, slightly brown-shifted — a dried-berry red, not a wine red.
- `#7A2A33` — **Faded Ink Burgundy.** Secondary burgundy; narration links (underline only, no colour change on hover beyond a slight darken), and the resolved-text colour of forced skeleton paragraphs.
- `#2A0F14` — **Lamp-Shadow Brown-Black.** Body narration ink. Almost-black but warm and burgundy-biased — never `#000`. Also the colour of the long soft shadows the 3d vessels cast.
- `#C9A24B` — **Kintsugi Gold (matte).** The mended-crack seams, the type-signature curves, the seven small station numerals. Matte ochre-gold, *never* metallic, never with a gradient or specular highlight. Used sparingly — gold is precious because it is rare on the page.
- `#B8483C` — **Glaze Crack Red.** A slightly more orange burgundy used only for the *animated* edge of a skeleton block while it is in the act of forcing — a thin running line that traces the block's flowing-curve outline once, then disappears as the content resolves.
- `#8C7B5E` — **Old Tatami.** A muted olive-tan; the colour of the 3d clay vessels' mid-tone, and of small caption text under the vessels.
- `#D8C6A6` — **Skeleton Shimmer Hi.** The bright pole of every skeleton block's shimmer gradient (the low pole is `#EDDFC9` Pressed Paper). The shimmer is *slow* — a 2.6s sweep — and *low-contrast*; a thunk should look patient, not impatient.

There is no blue, no green, no purple, no neon, no pure white, no pure black, no glossy highlight, no glow, no gradient mesh, no aurora anywhere on the page. The only gradient permitted is the two-stop shimmer gradient inside skeleton blocks, and even that is a 14% lightness spread — barely a gradient at all. Error states (a deliberately-wrong code sample shown in Station 3 before the compiler "mends" it) are rendered in `#B8483C` Glaze Crack Red, then healed with a `#C9A24B` Kintsugi Gold seam — the page does not believe in alarm; it believes in mending.

## Imagery and Motifs

**The site uses no photography. No stock illustration. No icon library. No glassmorphic cards. No line-art.** The corpus has photography at 99%; haskell.quest claims the under-used `3d-render` imagery and the `flowing-curves` motif (5%) and combines them with the `skeleton-loading` mechanic so that every visual element is either (a) a soft matte 3D-rendered clay vessel, (b) a hand-authored flowing-curve SVG (kintsugi seam / brushstroke contour), or (c) a skeleton-shimmer block awaiting demand.

**The 3D-rendered clay vessels (the recurring object).** Five matte ceramic forms, modelled as if by an unknown potter: an empty tea-bowl (Station 0 and 6), a shallow water dish (Station 2), a tall handle-less cup, a chawan with one gold seam (Station 4), a folded sheet of rice paper (Station 5, technically a soft 3D surface, not a vessel). Each is rendered **matte, with one soft key light, a long low-contrast shadow, and a faint surface roughness** — *no* caustics, *no* specular glints, *no* reflections, *no* studio backdrop, *no* HDRI gloss. They are delivered as static layered PNGs (a body layer + a separate shadow layer) so the shadow can be offset slightly off-axis (asymmetry) and so each vessel can drift 6–10px on scroll-parallax independently of its shadow, suggesting it is sitting *on* the paper rather than pasted onto it. Before each vessel loads, its bounding box is — of course — a skeleton-shimmer block in the vessel's silhouette.

**The kintsugi seams (the flowing-curve motif).** Whenever the page shows a type signature, mends a deliberately-broken code sample, or marks one of the seven stations, it draws a **flowing-curve SVG path in matte `#C9A24B` Kintsugi Gold** — an asymmetric, hand-tuned Bézier that wanders like a real crack: never a perfect circle, never a perfect arc, never symmetric, always with one branch a little longer than the other. These seams are the only "decorative" lines on the page, and they are not decorative — each one marks a place where something was incomplete and got mended. The seams `path-draw` themselves in over 1.4–2.2s when their station is reached.

**The skeleton blocks (the core visual mechanic).** Every passage of narration, every code sample, every vessel, the wordmark, the station titles — all of them exist first as **a soft rounded-rectangle (corners 6px, edges very slightly wavy — a flowing-curve clip-path, not a clean rect) filled with the slow 2.6s `#EDDFC9 → #D8C6A6` shimmer**. When the visitor's attention forces the block, a thin `#B8483C` Glaze Crack Red line traces the block's wavy outline once (0.6s), the shimmer stops, and the real content cross-fades in over 0.5s with a tiny upward nudge (8px). Forced blocks do not re-shimmer (a thunk stays evaluated) — except in the two intentional demonstrations (Station 2's re-summoned `42`, Station 4's "don't rush the tea" dwell-forcing), where the re-shimmer is the point.

**The paper grain.** A single 4–6% monochrome noise overlay (`mix-blend-mode: multiply`) sits over the entire `#F4EAD9` page at all times — the texture of age. It is subtle enough to be felt, not seen, and it is the same texture on the wide empty side-fields as on the central column, so the column reads as mounted on the same sheet.

**No motif appears that is not on the seed list.** No maple leaves. No bamboo. No enso circles. No cherry blossoms. No "imperfect handwriting" font. No torn-paper edges as a Photoshop brush. No beige Squarespace gradient. No glassmorphism. No neon. No photography of a Zen garden. **The corpus's wabi-sabi clichés are aggressively excluded; the only Japanese reference that survives is kintsugi, and only because the site uses it as a structural metaphor for the type system, not as decoration.**

## Prompts for Implementation

Build haskell.quest as **one HTML file, one CSS file, one ES module, one SVG sprite of the kintsugi seams, and a folder of static layered PNGs for the five 3D vessels** — no framework, no router, no bundler, no build step. Three external assets only: the three Google Font links (Bricolage Grotesque, Newsreader, Spline Sans Mono). Everything else is hand-authored. **Bias the whole thing toward a slow, full-screen narrative pilgrimage; this is a story you scroll, not a site you navigate.**

**Document shell.** A single `<main class="kakemono">` centered in the viewport with `max-width: 62ch`, wide cream `#F4EAD9` paper-grain fields on either side. Inside it, seven `<section class="station" data-station-n>` elements stacked vertically with 200px gutters. No header element, no nav, no footer menu — the wordmark in Station 0 and the `— end of the demanded portion —` sign-off in Station 6 are the only chrome.

**The skeleton-as-thunk system (do this first; it is the whole site).** Author every piece of resolvable content twice in the markup: a `<div class="thunk" data-forces-at="0.6">` shimmer placeholder *and* its real content inside a `<template>` or hidden sibling. On load, only the thunks are visible. An `IntersectionObserver` with per-element `data-forces-at` thresholds (or, for Station 4, a dwell timer; for Station 2, a hover handler) "forces" each thunk: trace the wavy outline in `#B8483C` (animate an SVG `stroke-dashoffset` over 0.6s), stop the shimmer animation, then cross-fade the real content in over 0.5s with `transform: translateY(8px) → 0`. **Once forced, set `data-forced="true"` and never revert** — except the two intentional demos. The shimmer itself is a CSS `background: linear-gradient(100deg, #EDDFC9 35%, #D8C6A6 50%, #EDDFC9 65%)` with `background-size: 300% 100%` animated `background-position` over **2.6s** linear, infinite — *slow on purpose*. Skeleton blocks have a `clip-path` with very slightly wavy edges (a polygon with ±2px jitter on its corner points) so they are never crisp rectangles.

**Boot sequence (Station 0, ~3.4s).** On page load:
1. `t=0.0s` — Page is full of skeleton blocks; the side-fields' paper grain is already present.
2. `t=0.3s` — The wordmark thunk forces: outline traces, shimmer stops, and `haskell.quest` resolves character-by-character in Bricolage Grotesque 800, each glyph dropping in over 60ms with a ±2px vertical jitter so the word never sits perfectly level.
3. `t=1.6s` — The opening narration thunk forces (one line of Newsreader).
4. `t=2.2s` — The Station-0 tea-bowl thunk forces: its body PNG fades in over 0.6s, its shadow PNG fades in 120ms later and 6px off-axis.
5. `t=3.0s` — A faint hint appears at the bottom edge of the viewport: a small skeleton block with a 14px Bricolage caption `↓ scroll to demand the rest`, which itself forces (resolves) only after the visitor scrolls 1px — a tiny joke: even the instruction is lazy.
**Do not skip the boot on subsequent loads.** The site's entire framing is "values get demanded into existence"; the boot is the first demand.

**The seven stations.** Each `<section class="station">` has: a station numeral in matte gold Bricolage (00–06), set 16px off-axis; a station title in Bricolage 700–800 `clamp(40px,7vw,88px)` with per-glyph ±2px baseline jitter, flush-left; 2–4 thunk-paragraphs of 19px Newsreader narration that force at staggered scroll thresholds; and, where listed, a recessed `#EDDFC9` code panel in Spline Sans Mono, and/or one 3D vessel PNG pair. Station content per the Layout section above — and note the specific mechanics:
- **Station 1:** the `take 5 [1..]` result panel renders `[1,2,3,4,5,…` then a skeleton tail that *never forces* — wire its `IntersectionObserver` to deliberately do nothing. A 14px gold caption under it: `(the rest of the list was never demanded)`.
- **Station 2:** the `double 21` widget — first call resolves to `42` on scroll; second call is a thunk that resolves to `42` on hover, then after 900ms re-shimmers, repeatable. Caption: `(a pure call is cheap to summon again)`.
- **Station 3:** show `head (tail [])` (a deliberately-broken sample) in `#B8483C` red; on scroll-trigger, draw a gold kintsugi-seam SVG path *through* the panel over 1.6s and replace the sample with a safe `Maybe`-returning version, the new version's text in `#7A2A33`. Caption: `(the compiler mended it; the gold shows where)`. All other type signatures in this station are set *along* gold flowing-curve paths using SVG `<textPath>` in Bricolage 700.
- **Station 4:** the chawan PNG, centered, tilted 4°, one faint gold seam. Three thunk-snippets (`Maybe`, list, `IO`) — each requires the visitor to *dwell over it* for 1.2s before it forces. Narration retells the "what is a monad" lore fondly, then explicitly declines to define it. No "burrito" image — just the bowl. Caption: `(understanding, like tea, should not be rushed)`.
- **Station 5:** a 3D rice-paper PNG sequence (4–6 frames) that "folds" on scroll via `scroll-triggered` frame-swapping, each fold edge a soft flowing curve; alongside it, `foldr (+) 0 [1,2,3]` expands term-by-term `(1 + (2 + (3 + 0)))`, each term forced from skeleton in sequence.
- **Station 6:** the dimmed empty tea-bowl returns; the final narration line forces; then one trailing skeleton block at the very bottom **never forces** (the part of the quest that is the visitor's); below it `— end of the demanded portion —` in Bricolage 700 small caps, gold.

**Cursor.** A single custom cursor: a 12px hollow `#5C1A24` burgundy ring with a soft 1px blur (worn, not crisp). On hover over a forceable thunk, the ring fills slowly with `#D8C6A6` over 400ms (a hint that attention forces). No magnetic, no spring, no elastic, no cursor-follow trail — the cursor is calm, like everything else.

**Motion discipline.** The only animations are: the slow shimmer, the outline-trace on forcing, the cross-fade-up of resolved content, the per-glyph wordmark/title jitter, the gold seam path-draws, the 3D vessels' tiny independent scroll-parallax, and the rice-paper fold-frames. **No parallax-heavy backgrounds, no spring physics, no magnetic buttons, no cursor-follow blobs, no tilt-3D cards, no typewriter on body text, no counter-animate, no Lottie.** Everything eases gently (`cubic-bezier(0.33, 0.0, 0.2, 1)`), nothing bounces, nothing snaps.

**Scroll.** Native. No scroll-jacking, no snap, no smooth-scroll override. The pilgrimage is at the visitor's pace.

**Sound.** None.

**No CTA. No "get started". No pricing. No stat grid (the only numbers on the page are real Haskell results and the seven station numerals — diegetic, not marketing). No testimonials. No "join the community". No FAQ. No email field. No social links. No "powered by". No cookie banner styled to be cute. The page is a quest through a language, and it ends with a thunk that the visitor must force themselves.** AVOID: CTA-heavy layouts, pricing blocks, stat-grids, card grids, hero-CTA composition.

## Uniqueness Notes

This design's differentiators — each a deliberate departure from corpus norms documented in the frequency analysis:

1. **Wabi-sabi with the clichés excised.** Wabi-sabi sits at ~2% in the aesthetic corpus and almost every web implementation leans on maple leaves, bamboo, enso circles, beige gradients, and an unattributed "transience" epigraph. haskell.quest forbids all of those and rebuilds wabi-sabi from its three load-bearing primitives only: asymmetry-and-the-unfinished (content that arrives incomplete and one block that stays incomplete forever), the texture of age (paper grain, kintsugi seams, faded ink), and a strict earthen burgundy-cream palette that never brightens. The only surviving Japanese reference is kintsugi, and it survives only because it is repurposed as a *structural metaphor for the type system*, not as decoration.

2. **skeleton-loading reframed from a loading state into an epistemology.** `skeleton-loading` is at 3% in the patterns corpus and is everywhere a stopgap shimmer before content arrives. haskell.quest makes it the site's entire mechanic: a not-yet-needed value (a Haskell thunk) *is* a skeleton block, and the visitor's attention "forces the thunk" into real content. Forced blocks never re-shimmer (a thunk stays evaluated), one block at the very bottom is never forced (the quest's lazy tail), and a `take 5 [1..]` result trails off into a skeleton that is never demanded. No design in the read references uses skeleton-loading as a load-bearing concept rather than a spinner.

3. **burgundy-cream palette claimed with discipline.** Burgundy-cream is at ~3% in the palette corpus — almost untouched — and where it appears it usually drifts toward wine-red glamour or warm-luxe gradients. haskell.quest uses a strict nine-value earthen wedge (dried-sumac burgundy, unbleached rice paper, lamp-shadow brown-black, matte kintsugi gold) with *no* blue, green, purple, neon, pure white, pure black, glow, or gradient mesh — the only gradient on the page is a 14%-lightness shimmer. Even the broken-code error state is healed in gold rather than flagged in alarm-red. The restraint is the design.

4. **3d-render imagery used as matte unknown-craftsman ceramics, not glossy product shots.** The corpus's 3d-render slot, when used at all, trends toward glossy inflated-3D product hero objects with caustics and HDRI gloss. haskell.quest's five 3D objects are matte clay vessels — one key light, a long low-contrast shadow, faint surface roughness, no specular, no reflection, no backdrop — delivered as layered PNGs so each vessel drifts independently of its off-axis shadow. They are the moon-in-the-window of the story, never a product.

5. **"centered" layout reframed as a hanging scroll, not a hero.** Centered layout is the one crowded slot in the seed (83% of the corpus) and is almost always "centered hero + card grid below". haskell.quest reads "centered" as a kakemono: one 62ch column hung in the middle of a wide empty paper field, no sidebar, no cards, no bento, no two-column anything, large *ma* gutters — the column is a mounted artefact, not a landing page.

6. **display-bold typography carried by an expressive variable grotesque with deliberate baseline jitter.** The corpus's display-bold slot (~7%) is usually Bebas or an oversized geometric sans set perfectly level. haskell.quest commits to Bricolage Grotesque at 700–800 with per-glyph ±2px baseline jitter on the wordmark and all seven station titles — the type itself is a little unfinished, a little asymmetric, which is the whole wabi-sabi point. Paired with Newsreader (nostalgic narration) and Spline Sans Mono (soft-humanist code, not a 1980s terminal) — an unclaimed trio in the read references.

7. **flowing-curves motif used only as kintsugi seams, and only where something was mended.** `flowing-curves` is at ~5% in the motif corpus and usually appears as decorative blob backgrounds. Here every flowing curve is an asymmetric hand-tuned Bézier in matte gold that marks a place where something was incomplete and got fixed — a type signature, a healed broken sample, a station numeral. There is no decorative curve anywhere; the curves are load-bearing.

8. **nostalgic-retro tone executed as a fond-elder pilgrimage with no CTA.** Nostalgic-retro is at ~3% in the tone corpus and usually surfaces as a couple of punchy lines in a hero. haskell.quest commits to seven full stations of unhurried, remembering, fond-of-an-old-textbook narration — the "what is a monad" lore retold gently, then deliberately not defined — with no call-to-action, no "get started", no second-person sales address. The narrator never asks the visitor for anything except, at the very end, to force the last thunk themselves.

9. **No CTA. No pricing. No stat grid. No FAQ. No testimonials. No social proof. No newsletter signup. No cookie banner.** The only numbers on the page are real Haskell results and the seven station numerals (00–06). The page ends with `— end of the demanded portion —` in gold small caps above a skeleton block that never resolves, and that is the entire commercial surface.

**Chosen seed (planned, from assignment):** `aesthetic: wabi-sabi, layout: centered, typography: display-bold, palette: burgundy-cream, patterns: skeleton-loading, imagery: 3d-render, motifs: flowing-curves, tone: nostalgic-retro`.

**Avoided patterns from frequency analysis:** photography (99%), gradient + warm palette (97% / 97%), full-bleed + card-grid + centered-hero composition (94% / 86% / 83% — "centered" is used because the seed demands it, but radically reframed as a kakemono hanging scroll, not a hero), parallax + cursor-follow + spring + stagger + magnetic patterns (the five most-overused interaction patterns, all 79%+ — none appear here except a tiny independent scroll-parallax on the 3D vessels and a deliberately staggered *forcing* of skeleton thunks, which is the seed mechanic), hand-drawn aesthetic (96%), glassmorphism (64%), mono typography as the body face (95% — mono is used here only for code, never for narration), humanist (53%), pastoral-romantic + warm-inviting + friendly tones (top three at 37%/29%/18%). None of these appear in this design except where the seed itself overlaps the corpus default (centered layout at 83%), and there it is reframed beyond recognition.
<!-- DESIGN STAMP
  timestamp: 2026-05-10T12:55:47
  domain: haskell.quest
  seed: demands it, but radically reframed as a kakemono hanging scroll, not a hero
  aesthetic: haskell.quest is **a wabi-sabi tea-house for lazy evaluation** — a quiet, center...
  content_hash: 61b4f0ab7897
-->
