Skip to content

Kiln 2.7.3

The parts

16 sections, 23 primitives and 56 tokens in two modes, shown once each at real size. Eleven of the primitives are the repository's own component library, refined here and vendored unedited.

tokens

Every swatch is painted by a semantic utility, so this panel follows theme.css instead of repeating it.

  • Aa

    --background

    --foreground

  • Aa

    --card

    --card-foreground

  • Aa

    --muted

    --muted-foreground

  • Aa

    --secondary

    --secondary-foreground

  • Aa

    --accent

    --accent-foreground

  • Aa

    --primary

    --primary-foreground

  • --primary · -hover · -active

  • --input-border · 3.0+ everywhere

  • --shadow-color · warm, never black

  • --radius · 0.375rem, plus pills

  • --border · hairline

  • --ring · focus outline

  • --surface-tint · quiet hover

type

src/fonts.ts

Three shipped faces, self-hosted under OFL: Newsreader for display, Karla for text and UI, and Spline Sans Mono for prices, SKUs and dates. The display ladder steps by 1.333 from 1.5rem; tracking belongs to the step, not to the author.

  • --text-d4One at a time
  • --text-d3In stock now
  • --text-d2Six weeks from clay
  • --text-d1Order summary
  • --text-leadThrown by hand in Whitstable, fired four times a year.
  • --text-body250 ml, 9 cm tall, dishwasher and microwave safe.
  • --text-smallFree UK delivery over £60
  • --text-captionUnsubscribe from any email in one click
  • --tracking-labelWhitstable, Kent
  • --font-mono£146 · MRL-014 · 14 March · 1,260°C

ui

src/components/ui/

Button, ButtonLink, Badge, Eyebrow, Container, the KilnMark, the mode toggle, and the field family every Kiln form is built from, in each state a shop actually reaches. The cart is a sheet now — it is in the header above and it has its own frame below; the store behind it is ui/cart-store.

primary

secondary

ghost

In this batchStonewareLast one

Whitstable, Kent

Unsubscribe from any email in one click

That address is missing an @. Check it and send it again.

Set when the order was placed

We post within the UK while the studio is two people

Written on a card and tucked in beside the wool

Container · prose 48rem / default 72rem / wide 80rem

Eleven parts from the library

Escape, the focus trap, the focus return, the scroll lock, the roving keyboard models and every ARIA graph below come from ui/ at the repository root and are vendored, unedited, into src/components/ui/_tt/. Every class string, every glyph and every word on this page is Kiln's, in the file beside each frame.

ui/accordion-disclosure

src/components/ui/accordion-disclosure.tsx

The returns questions, the product specs and the cart's gift note. Native <details>, so the answers are in the page a crawler reads and the row opens before hydration.

Enter and Space open a row. Escape inside an open answer closes it and puts focus back on the question — the one thing <details> does not do.

closed

How do I start a return?

Email us within thirty days and we send a prepaid label back.

It arrived broken.

Photograph the box and the piece and email us.

open

Can I swap the glaze?

30 days

Yes, within thirty days, for anything in the current batch. Ash comes back at the next firing, so it is usually the one we cannot swap to.

What cannot come back?

Anything that has been used. A mug that has held tea is yours.

Under prefers-reduced-motion the 250ms height tween is off and the answer is simply there.

ui/sheet-drawer

src/components/ui/sheet-drawer.tsx

The cart and the narrow-width nav, which through 2.6.0 were two hand-written panels drawn as sheets with no role, no trap and no Escape.

Enter and Space open it. Tab is held inside the panel, the page behind stops scrolling, the scrim closes it, and Escape hands focus back to the control that opened it.

default · the panel, no layer

side · left, the narrow-width nav

live · the real layer

Sizes sm 18rem · md 24rem · lg 30rem, measured from the edge it arrives on. Open 400ms, close 350ms, 16px and a fade; under prefers-reduced-motion it is gone on the same tick focus returns.

ui/quantity-stepper

src/components/ui/quantity-stepper.tsx

One control for a quantity, in the cart and on the product page. The figure is a real number input: it posts, the browser clamps it, and six is two keystrokes.

Up and Down step it. A typed figure commits on blur or Enter; an emptied field falls back to the last good value, never to one.

default

2 Ridge tumbler in your cart

min · the floor

1 Ridge tumbler in your cart

max · the whole firing

6 is all there is from this firing

The bound is spoken by the readback, not written on the dead button: a disabled control is out of the tab order and its description is a sentence nothing reads.

disabled · a sold-out line

ui/variant-selector

src/components/ui/variant-selector.tsx

The glaze axis on the product page: native radios in a fieldset, so the choice posts with no script at all.

One tab stop for the group. Arrow keys move and select; an option that is out is skipped, and its reason is inside its own label.

default · all three in the batch

Glaze

Rust glaze, £28, 6 left

disabled · one out, with its reason

Glaze

Rust glaze, £28, 6 left

An option with `disabled: true` and no note is a compile error, not a review comment.

ui/rating-input

src/components/ui/rating-input.tsx

The rating a buyer sets, in the review form under the quotes. Whole marks only — a half-mark input is a pointer gesture a keyboard cannot reach.

One tab stop. Arrow keys move and select; the first option is No rating, so ArrowLeft from one star takes the rating back off.

default

Your rating

4 out of 5, thank you

empty · what the form opens as

Your rating

No rating yet, and the words matter more

disabled · already sent

Your rating

Sent in March, and closed for changes

The five is still the checked radio, so it is what a screen reader reports; the marks do not draw their fill while the group is off, because the part writes one data-state for both facts. Reported to the library.

ui/filter-chip

src/components/ui/filter-chip.tsx

The collection browser's active-filter receipts. The value is text and the control is named for the value, so what a buyer reads is what a screen reader hears.

Removing a chip moves focus to the control that set the filter — a node that survives the removal — before the chip goes.

default

Available now

row · where a chip is seen

Available nowUnder £40Tumbler

ui/search-input

src/components/ui/search-input.tsx

The shelf search, over name, piece family and glaze. A real type=search with a persistent label — never a placeholder standing in for one.

The clear control returns focus to the field before it empties the value, so the button that vanishes never takes focus with it.

rest

6 pieces shown

filled · the clear appears

1 piece shown

no-result · the query is kept

0 pieces shown

Nothing on the shelf matches teapot.

disabled

ui/pagination

src/components/ui/pagination.tsx

The reviews, three to a page. The ends disable rather than wrap, and the range sentence is the announcement a filter reset would otherwise make in silence.

Every target is a real button. Previous and Next leave the tab order when they run out.

default · a long run, one elision

disabled · one page, both ends dead

long unit · the sentence wraps

ui/field

src/components/ui/field.tsx

One shell for the input, the select and the textarea. One message line per field, precedence error then success then description — so a form that is wrong in one place does not reveal every sentence it holds.

Every id derives from the control's own, which is what lets the error summary link to it in markup a server rendered.

One email per firing, about four a year

We post within the UK for now

Written on a card, tucked in beside the wool

That address is missing an @. Check it and send it again.

Pick where it is going before we can price the postage.

A little more than that. Twenty characters or so.

On the list since the January firing.

Free over £60, otherwise £4.20 tracked.

Saved with the order.

Set when the order was placed

Fixed once a piece is glazed

Posted with the order on 3 March

Wholesale opens after the summer firing

We post within the UK while the studio is two people

Available once there is something in the cart

The submitting state is the fieldset, not the field: ui/form disables it and marks it aria-busy while a request is out, which is what the restock band and the review form under the quotes both do. There is no ui/form frame — a form has no appearance of its own to photograph.

ui/form-error-summary

src/components/ui/form-error-summary.tsx

Where focus lands when more than one field is refused. One field goes straight to the control instead, because a summary listing one item is a redirection for no reason.

The panel is a -1 tab stop that only exists when it has something to say; each row is a link to the control it is about.

error-summary · two refused fields

hero

src/components/hero.tsx

A8: the statement offset on the plaster wall, the studio photograph bleeding off the page.

Whitstable, Kent

One at a time

Everything here was thrown by hand and came out of the kiln last week.

  • Posted within two days
  • Packed in wool
  • 30 days to send it back
A row of freshly thrown, unglazed stoneware cups drying on a wooden board on the studio bench, with tools and drying shelves behind.

product-grid

src/components/product-grid.tsx

The shelf: the full-bleed hairline plate. Props: heading, lede, only, showFiringNote, surface.

In stock now

Six pieces from the March firing, and no repeats until the kiln goes on again.

6 pieces

Next firing opens 14 March. Sold-out pieces come back then, in a slightly different glaze.

collection-browser

src/components/collection-browser.tsx

A search field, availability, price and sort over one catalogue fixture, with removable receipts — shown in default, five-result, sparse and no-result states.

Default

6 pieces

Pieces shown

6 pieces shown

  • A wide shallow stoneware serving bowl with a pale ash glaze pooling in the well and a raw clay foot ring.

    Ash glaze bowl

    £64

    22 cm · serves four

  • Two stoneware mugs with pulled handles standing side by side, one glazed terracotta and one sand.Last one

    Everyday mugs, pair

    £52

    300 ml each · rust and sand

  • A small fluted stoneware milk jug with a pinched pouring spout and a matte cream glaze over speckled clay.

    Fluted milk jug

    £38

    200 ml · cream glaze

  • A stoneware side plate with an oatmeal glaze, iron flecks through the surface and a slightly undulating rim.

    Speckled side plate

    £34

    21 cm · oatmeal glaze

  • A tall narrow stoneware stem vase with a rust-terracotta glaze holding a single dried seed head.Sold out

    Stem vase

    £72

    26 cm tall · one stem

Filtered

5 pieces

Pieces shown

5 pieces shown

Active filters

Available now
  • A wide shallow stoneware serving bowl with a pale ash glaze pooling in the well and a raw clay foot ring.

    Ash glaze bowl

    £64

    22 cm · serves four

  • Two stoneware mugs with pulled handles standing side by side, one glazed terracotta and one sand.Last one

    Everyday mugs, pair

    £52

    300 ml each · rust and sand

  • A small fluted stoneware milk jug with a pinched pouring spout and a matte cream glaze over speckled clay.

    Fluted milk jug

    £38

    200 ml · cream glaze

  • A stoneware side plate with an oatmeal glaze, iron flecks through the surface and a slightly undulating rim.

    Speckled side plate

    £34

    21 cm · oatmeal glaze

Sparse

1 piece

Piece shown

1 piece shown

Active filters

Last one
  • Two stoneware mugs with pulled handles standing side by side, one glazed terracotta and one sand.Last one

    Everyday mugs, pair

    £52

    300 ml each · rust and sand

No results

0 pieces

Pieces shown

0 pieces shown

Active filters

Last oneUnder £40

No pieces found

No pieces match these filters.

product-detail

src/components/product-detail.tsx

Gallery, the glaze selector, the quantity stepper, a working add to cart, spec disclosures at prose width.

Ridge tumbler

£28

4.8from 6 reviews of this piece

The Ridge tumbler standing on a cream backdrop: rust-brown glaze over the top half, throwing ridges through the speckled clay below.
  • Close view of the tumbler's rim where the rust glaze breaks into the raw speckled clay.
  • The tumbler holding black tea on a linen cloth, beside a small unglazed dish of tea leaves.

A short, heavy-bottomed cup for water, whisky or a flat white. Thrown with the ridges left in, so it sits in the hand without trying.

Glaze

Rust glaze, £28, 6 left

1 to add

6 left from this firing

2 in your cart, rust glazeView cart

Free UK delivery over £60, posted within two days, 30 days to send it back.

MRL-014

Size and care

250 ml, 9 cm tall, 8 cm across the rim. Dishwasher and microwave safe. Each one is thrown by hand, so heights vary by a few millimetres.

Delivery and returns

Free UK delivery over £60, otherwise £4.20 tracked. Posted within two days of your order. 30 days to send it back unused, postage included.

About the rust glaze

Wood ash, iron oxide and a little tin, poured over the upper half so it breaks where the clay ridges catch it. No two come out of the kiln alike.

cart-contents

src/components/cart-contents.tsx

The live cart above, reading the same store the header does; the designed empty state below via variant='empty'.

Items in your cart

  • The Ridge tumbler, rust glaze over speckled stoneware.

    Ridge tumbler

    Rust glaze

    MRL-014 · £28 each

    2 Ridge tumbler in your cart

    £56

  • A pair of stoneware mugs, one terracotta and one sand.

    Everyday mugs, pair

    Rust and sand

    MRL-008 · £52 each

    1 is all there is from this firing

    £52

  • A small fluted stoneware milk jug with a pinched spout.

    Fluted milk jug

    Cream glaze

    MRL-032 · £38 each

    1 Fluted milk jug in your cart

    £38

One of these is the last from this firing.

Order summary

Subtotal
£146
Delivery
Free
Total
£146
Add a gift noteWritten on a card

200 characters left

Delivery is free over £60. Posted within two days, tracked, with 30 days to send it back.

Keep shopping

Nothing in the cart yet

Six pieces came out of the March firing and they are all on the shop page.

Back to the shop

collection-split

src/components/collection-split.tsx

Process photograph beside the four stages, split seven columns to five. Optional moreHref adds the link to the long version.

A potter's hands pulling the wall of a stoneware cylinder on a spinning wheel, wet clay slip across the fingers.

The making

Six weeks from clay to kitchen

Nothing here is cast, and nothing is finished by anyone who did not throw it.

  1. Wedge

    20 min

    Clay from a pit in Devon, wedged by hand until there is no air left in it.

  2. Throw

    1 morning

    Nell throws twelve at a sitting. Nine usually survive trimming the next day.

  3. Glaze

    2 days

    Iwan mixes in five-litre buckets: wood ash, iron oxide, a little tin.

  4. Fire

    36 hours

    Two firings up to 1,260°C. What the kiln does to the glaze is not up to us.

The whole process

firing-calendar

src/components/firing-calendar.tsx

The kiln year: a reading block at prose width, the next date at display size, and the four firings in the hairline plate.

The kiln year

Four firings a year

A load takes 36 hours to fire and two days to cool, so nothing here is made to order.

Next firing
14 March
  • Spring

    14 March

    Tumblers, mugs and jugs, and the glazes that sold out over winter.

  • Summer

    6 June

    Bowls and plates, and the first ash glazes of the year.

  • Autumn

    12 September

    Tableware, thrown early so it is dry before the damp sets in.

  • Winter

    28 November

    One small load, mostly repeats of whatever sold fastest.

promises

src/components/promises.tsx

Dispatch, packing and returns: the three objections a fragile object raises. Optional moreHref points at the full terms.

Delivery, packing and returns

  • Posted within two days

    Orders placed before 2pm on a weekday go out the next morning, tracked, from the Whitstable post office.

  • Packed in wool

    Wool fleece and recycled paper, no plastic. Four breakages in 412 orders, and every one was replaced.

  • 30 days to send it back

    Unused, for a full refund, postage included. Email us first and we send the label.

delivery-rates

src/components/delivery-rates.tsx

The threshold at display size beside a real table of costs and transit windows, five columns to seven.

Rates

What the post costs

Free UK delivery over

£60

Below that it is £4.20, tracked, whatever is in the box.

Orders outside the UK may attract duty on arrival, which we cannot pay for you.

Delivery cost and time in the post, by destination
WhereCostIn the post
UK, over £60Free2–3 days
UK, under £60£4.202–3 days
Europe£145–8 days
Rest of world£248–14 days

returns-faq

src/components/returns-faq.tsx

Four questions on ui/accordion-disclosure, the same part the product page's specs and the cart's gift note use.

Sending it back

Returns and breakages

Thirty days, postage both ways, and a replacement if it arrives in pieces.

How do I start a return?

Email us within thirty days and we send a prepaid label back. It has to come back unused, in the wool it arrived in, and the refund goes out the day it lands.

It arrived broken.

Photograph the box and the piece and email us. We replace it out of the next firing or refund you, whichever you would rather, and we never ask for the broken one back.

Can I swap the glaze?

Yes, within thirty days, for anything in the current batch. Ash comes back at the next firing, so it is usually the one we cannot swap to.

What cannot come back?

Anything that has been used. A mug that has held tea is yours.

small-print

src/components/small-print.tsx

Who you buy from, when an order is an order, what happens to your email. Unboxed on purpose, because /delivery already runs a plate.

The small print

Who you buy from
Marl Ceramics, a two-person partnership at Unit 4, Oyster Yard, Whitstable CT5 1AB. Prices include VAT where it applies.
When an order is an order
When the tracking email lands, not when you pay. Anything the kiln takes from us before then is refunded the same day.
Your email address
Used for your order, and for the restock list if you asked for it. We delete it whenever you tell us to.

reviews

src/components/reviews.tsx

Named buyers, each quote tied to the piece they own, three to a page. The write-a-review form under them is the theme's only multi-field form and the rating input's home.

Reviews

Living with the pots

4.8average across the studio

  • Small enough for an espresso, heavy enough that it does not skate across the counter. I have ordered two more.

    Femi Adeyemi, Hackney

    Ridge tumbler

  • The rim is thinner than I expected and it is the only mug I reach for now. Four months of daily use and it still looks new.

    Ama Boateng, Bristol

    Everyday mugs, pair

  • Ordered on the Tuesday, on my shelf by the Thursday, wrapped in wool like something borrowed from a museum.

    Tom Rees, Cardiff

    Fluted milk jug

Write one of your own

We read every one and publish it with your first name and town. Nothing else is kept.

Your rating

No rating yet, and the words matter more

Published as a first name and a town

What it is like to live with, in your words

newsletter

src/components/newsletter.tsx

The restock list, which replaces a back-order button — and the theme's simplest submit flow: one field, a pending button, a receipt focus lands on.

Get told when the kiln opens

One email per firing, about four a year, with what came out and what it costs.

Unsubscribe from any email in one click

page-header

src/components/page-header.tsx

Editorial opener with a constrained measure, for every page that is not the shop front.

Four items

Your cart

Delivery is free over £60, so this one ships for nothing.

The header above and the footer below are the same components every page uses, shown in place.

tailthemes previews