The dish
At rest. Warms on hover.
Look 09, the kit sheet
Warm to the touch. Everything the look is made of, on one page. Every block below is the real markup from sections/ and components/, so if a page built from the look disagrees with this sheet, this sheet wins.
Palette
--bg --surface --surface-2 --text --accent#2A1D14#33241A#22170F#FFE3B3#EA6113#2A1D14rgba(234, 97, 19, 0.45)rgba(234, 97, 19, 0.30)linear-gradient(180deg, #F88F22 0%, #EA6113 62%, #D4530F 100%)linear-gradient(180deg, #FBB931 0%, #F88F22 55%, #EA6113 100%)inset 0 2px 0 rgba(255, 255, 255, 0.42), inset 0 -10px 14px rgba(80, 20, 0, 0.36), 0 14px …inset 0 2px 0 rgba(255, 255, 255, 0.5), inset 0 -10px 14px rgba(80, 20, 0, 0.3), 0 18px 30…#9CD78A#FBB931#FF6A4ADecoration only. The four stops of the scale, the ramp they make, the halo under the fan, the brown ground and the grain over everything. The ramp is used only as a bar. Never behind text.
#EA6113#F88F22#FBB931#FFE3B3linear-gradient(90deg, #EA6113 0%, #F88F22 34%, #FBB931 67%, #FFE3B3 100%)radial-gradient(60% 55% at 50% 60%, rgba(248, 143, 34, 0.42), rgba(234, 97, 19, 0.12) 55%,…radial-gradient(120% 90% at 50% 40%, #3A281C 0%, #2A1D14 55%, #1E140E 100%)inlinedType
Control Meter is the original face drawn for this look and ships in fonts/. The scale is closed: eyebrow, display, h2, lede, body, meta, price.
Everything at a temperature.
Four colours, one scale, nothing cold.
$125one of fifty
A look for sites built with Claude Code. Glazed stoneware you can press, bisque wells for everything chosen, four colours on dark brown, one ember per screen.
Raised is glazed stoneware: a hard gloss, the glaze pooling darker toward the bottom edge, one specular on top. Recessed is bisque, the matte well it sits in. There is no third material, and state is depth, never a colour.
Look 09, an edition of fifty
Materials
Icons
24-unit grid, only circles and ovals, overlapping, no strokes: the discs at .55 of currentColor and every overlap solid. Use inline as <svg class="bl-icon"><use href="#i-name"/></svg> or as the files in assets/icons/.
Motion
Things arrive as a stack and fan open, each a stop hotter than the last. Headlines fan out word by word (.bl-words). Blocks fan in (.bl-reveal, staggered by .bl-stagger). Eyebrows and ledes follow (.bl-rise). The film comes up with the page (.bl-hero__film). A glazed surface lifts and warms a stop on hover (.bl-hover-lift). Keys sink into bisque when pressed. Reduced motion lands everything instantly.
.bl-reveal .bl-words .bl-rise .bl-rise--x .bl-rise--late .bl-hover-liftReplay
Everything at a temperature.
Click to play it again.
.bl-skeleton .bl-spinner .bl-progressComponents
Helper classes (.is-hover, .is-focus, .is-active, .is-selected, .is-disabled, .is-loading, .is-invalid, .is-open, .is-checked) draw each state without a pointer. theme.css styles the helper and the real pseudo-class identically.
Buttons are glazed keys: a gloss on top, the glaze pooling darker at the bottom edge, a shadow under. The primary is the ember glaze with dark ink and is the one hit per screen. Hover lifts and warms a stop; pressed sinks the key into bisque. Loading swaps the label for a spinner.
components/buttons.htmlFields are bisque wells. Focus lights the floor of the well ember; invalid draws an error line along it; disabled dims. The checkbox is a small well that fills with an ember disc when checked.
components/inputs.htmlThat does not look like an email.
No mailing list. We only write back.
Cards are glazed tiles with a bisque window in them. Media is the halo, the fan or an icon on the pattern, never a photograph. Hover lifts and warms; selected sinks the whole card into bisque.
components/cards.htmlAt rest. Warms on hover.
Hover, drawn.
Selected, sunk into bisque.
Badges are small bisque wells with a disc in them. The plain badge carries a dim disc; ok, warn and err colour it. They are the only place the status colours appear besides toasts and field errors.
components/badges.htmlTabs are keys on a glazed strip. The active tab has been pressed into bisque. Hover darkens the ink, focus rings in the ember line, disabled dims.
components/tabs.htmlThe accordion is a stack of glazed tiles. The open item sinks into bisque and its plus becomes an ember minus.
components/accordion.htmlFifty sites get to wear Slow Burn. Yours is one of them, with its own edition number and licence key.
CLAUDE.md is a set of rules with teeth. If a part does not exist, Claude stops and says so.
Because a scale with more stops is a gradient, and a gradient is not a decision.
The modal is a glazed panel over a scrim. The static modifier renders it inline on the sheet, in a bisque well with the halo behind it.
components/modal.htmlWhen the fiftieth copy sells, Slow Burn is archived for good and a new look takes its place on the rack. This cannot be undone.
Toasts are small glazed slabs with a disc. Plain, ok, warn and err. The static modifier renders them inline.
components/toast.htmlThe table is the shelf, set in a bisque well. Numbers are in Control Meter Regular and ranged right. Hover warms a row; selected lifts it out of the well as a glazed strip.
components/table.html| Look | Status | Copies | Left |
|---|---|---|---|
| Aura Glow | Edition open | 50 | 43 |
| Radio | Edition open | 50 | 50 |
| Slow Burn | Twelve left | 50 | 12 |
| Plinth | Archived | 50 | 0 |
Sections
Variant A is what the demo uses. Variant B is the alternative for the same job. Page recipes are in CLAUDE.md.
Variant A
Variant B
The opening screen. A is the fan, full bleed: the film behind everything, the fan across the top of the screen, and the headline, lede, keys and the scale centred under it on a scrim. Until the film ships the video carries its poster alone, which is also what reduced motion shows; when it lands, a <source> for ../motion/slow-burn-hero.mp4 goes inside the video. B is the split hero for inner pages: headline left, three bisque stats right, no film. Headlines use .bl-words so they fan out word by word.
sections/hero.htmlVariant A
Look 09 from Bandana
Four colours, one scale, nothing cold. Slow Burn is a locked look for sites built with Claude Code: glazed stoneware you can press, bisque wells for everything chosen, one ember per screen. One folder, one prompt, fifty copies.
Variant B
Look 09, inner page
The split hero. Headline on the left, three bisque wells on the right, one ember key. For pricing, about and work pages.
The parts of the look, one per glazed tile. A is six tiles in a grid, each with a disc-built icon in a bisque well and a number; hover warms the tile one stop. B is the same six as rows for a narrower page, icon left, text right.
sections/feature-grid.htmlVariant A
The parts
A look is one folder. Everything in it obeys one file, and the file is not negotiable.
Glazed stoneware: a hard gloss, the glaze pooling darker toward the bottom edge, one specular on top. And bisque, the matte well it sits in. Keys are glazed, fields are bisque, and anything chosen sinks into bisque. State is depth, never a colour.
Ember, orange, gold, cream. Four stops and nothing between them. The ember is the accent and lands once per screen, at the front of the fan.
A condensed rounded monoline, drawn from scratch for Bandana and bundled with the look. Headlines, prices, big numbers. Never a paragraph.
Disc-built: only circles and ovals, overlapping, and every overlap solid. Dish, stack, fan, kiln, glaze, chip, ring, foot, tong, shelf, cone, drip. One drawing each.
Things arrive as a stack and fan open, each a stop hotter than the last. Headlines fan out word by word. Nothing fades from nowhere and nothing slides in from off-screen. Presets only.
Native is the kiln room, dark brown. The other is the same discs on cream stock in daylight. Only the colour tokens change; the film stays dark in both.
Variant B
The parts, as a list
Raised and recessed. There is no third material.
Four stops. The ember is the one hit per screen.
Two cuts, display only, bundled.
Discs only. None is a variation of another.
From the stack, one stop hotter each.
The kiln room, and the same discs in daylight.
The rules, made visible. A is six glazed tiles on a three-column grid: the keys and their states, the face, the fan drawn in CSS, the scale, the three status discs, and the halo. B is four equal tiles for a shorter page.
sections/bento.htmlVariant A
The rules, made visible
A key is a glazed disc: a gloss on top, the glaze pooling at the bottom edge. Press it and it sinks into bisque. Every field is bisque too, and the ember comes up along its floor on focus.
Regular for prices and stats, Bold for headlines and the mark.
Four discs, ember in front. Drawn in CSS wherever a page needs the signature small.
The one gradient the look allows, and only as a bar: progress, the toggle dot, a bullet. Never on text, never behind a paragraph.
Ok, warn and err exist for badges, toasts and field errors, and nowhere else. They are never the accent.
The warm glow under the fan. Hero and CTA backdrops, tile art, card media. Never behind a paragraph.
Variant B
Four rules
The ember lands on the primary key and nowhere else.
Selected, active, current: bisque, every time.
Headlines, prices, numbers. Body copy is Figtree.
Nothing between the stops and nothing off the scale.
The kiln, close up. A is six glazed tiles with bisque windows, each holding one of the look's objects drawn in CSS: the fan, a glazed disc, a bisque well on focus, the scale, the digits, the key in the halo. B is four wide tiles.
sections/gallery.htmlVariant A
The kiln, close up
Variant B
Wide tiles
The editions. A is three glazed plans side by side; the chosen one has sunk into bisque and carries the one ember key. B is the same three as rows.
sections/pricing.htmlVariant A
Editions
Every look on the rack is sold fifty times and archived. No reprints, no free tier, no second firing.
$125Slow Burn
$300any three
$425any five
Variant B
Editions, as rows
A rule, set large, on one glazed slab. Not a customer quote: the look speaks for itself. A is one centred slab. B is two side by side, ranged left.
sections/testimonial.htmlVariant A
It refuses a fifth colour. Ember, orange, gold, cream, and the brown they sit on.
Variant B
Nothing on the page is ever cold.
State is depth. Chosen sinks into bisque.
Questions. A is the split: the head on the left, the accordion on the right; shut items are glazed, the open one has sunk into bisque and its plus has become an ember minus. B is a plain two-column definition list, no accordion.
sections/faq.htmlVariant A
Questions
Short answers. The long ones are in the file.
Variant B
Questions, flat
The close. A is one glazed slab with the halo under it, the headline left and the one ember key right. B is a full-width band, centred, for the foot of an inner page.
sections/cta.htmlVariant A
Look 09
Fifty copies. When they are gone, Slow Burn is archived and the rack moves on.
Variant B
Look 09
One folder, one prompt, fifty copies.
Variant A
Variant B
Write to us. A is the split: the head on the left, the form on the right, every field a bisque well and the one ember key to send. B is the form alone on a glazed slab, for a contact page.
sections/contact-form.htmlVariant A
Write to us
Tell us what you are building and which looks you have your eye on. We answer within a day.
Variant B
Write to us
Tokens
Native values first; the light scheme overrides only the colour tokens. The same list is in theme.json.
| Token | Group | Native | light |
|---|---|---|---|
| --bg | canvas | #2A1D14 | #F6E3C4 |
| --surface | canvas | #33241A | #FFF0D6 |
| --surface-2 | canvas | #22170F | #EBD3AC |
| --text | canvas | #FFE3B3 | #2A1D14 |
| --text-2 | canvas | rgba(255, 227, 179, 0.68) | rgba(42, 29, 20, 0.70) |
| --text-3 | canvas | rgba(255, 227, 179, 0.44) | rgba(42, 29, 20, 0.46) |
| --line | canvas | rgba(255, 227, 179, 0.10) | rgba(42, 29, 20, 0.10) |
| --accent | accent | #EA6113 | |
| --accent-ink | accent | #2A1D14 | |
| --accent-line | accent | rgba(234, 97, 19, 0.45) | |
| --accent-glow | accent | rgba(234, 97, 19, 0.30) | rgba(234, 97, 19, 0.22) |
| --accent-bg | accent | linear-gradient(180deg, #F88F22 0%, #EA6113 62%, #D4530F 100%) | |
| --accent-bg-up | accent | linear-gradient(180deg, #FBB931 0%, #F88F22 55%, #EA6113 100%) | |
| --accent-shadow | accent | inset 0 2px 0 rgba(255, 255, 255, 0.42), inset 0 -10px 14px rgba(80, 20, 0, 0.36), 0 14px … | |
| --accent-shadow-up | accent | inset 0 2px 0 rgba(255, 255, 255, 0.5), inset 0 -10px 14px rgba(80, 20, 0, 0.3), 0 18px 30… | |
| --ember | aura | #EA6113 | |
| --orange | aura | #F88F22 | |
| --gold | aura | #FBB931 | |
| --cream | aura | #FFE3B3 | |
| --ramp | aura | linear-gradient(90deg, #EA6113 0%, #F88F22 34%, #FBB931 67%, #FFE3B3 100%) | |
| --halo | aura | radial-gradient(60% 55% at 50% 60%, rgba(248, 143, 34, 0.42), rgba(234, 97, 19, 0.12) 55%,… | radial-gradient(60% 55% at 50% 60%, rgba(248, 143, 34, 0.30), rgba(234, 97, 19, 0.08) 55%,… |
| --pattern | aura | radial-gradient(120% 90% at 50% 40%, #3A281C 0%, #2A1D14 55%, #1E140E 100%) | radial-gradient(120% 90% at 50% 40%, #FFF0D6 0%, #F6E3C4 55%, #EBD3AC 100%) |
| --grain | aura | url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='1… | |
| --grain-opacity | other | 0.07 | 0.05 |
| --hero-text | other | #FFE3B3 | #FFE3B3 |
| --hero-text-2 | other | rgba(255, 227, 179, 0.72) | rgba(255, 227, 179, 0.72) |
| --hero-scrim | other | linear-gradient(180deg, rgba(42, 29, 20, 0) 0%, rgba(42, 29, 20, 0) 38%, rgba(42, 29, 20, … | linear-gradient(180deg, rgba(42, 29, 20, 0) 0%, rgba(42, 29, 20, 0) 38%, rgba(42, 29, 20, … |
| --ok | status | #9CD78A | #3E8A3A |
| --warn | status | #FBB931 | #A66A0E |
| --err | status | #FF6A4A | #D4400F |
| --raised-bg | materials | linear-gradient(180deg, #3F2D20 0%, #34251B 55%, #2C1F16 100%) | linear-gradient(180deg, #FFF6E6 0%, #FFF0D6 55%, #F5E1C0 100%) |
| --raised-bg-up | materials | linear-gradient(180deg, #4A3525 0%, #3A2A1E 55%, #31221A 100%) | linear-gradient(180deg, #FFFBF2 0%, #FFF4E0 55%, #F8E6C8 100%) |
| --raised-flat | materials | #34251B | #FFF0D6 |
| --raised-ink | materials | #FFE3B3 | #2A1D14 |
| --raised-ink-2 | materials | rgba(255, 227, 179, 0.68) | rgba(42, 29, 20, 0.70) |
| --raised-shadow | materials | inset 0 1px 0 rgba(255, 227, 179, 0.20), inset 0 -12px 18px -8px rgba(0, 0, 0, 0.55), 0 1p… | inset 0 1px 0 #FFFFFF, inset 0 -12px 18px -8px rgba(120, 70, 20, 0.22), 0 1px 0 rgba(120, … |
| --raised-shadow-up | materials | inset 0 1px 0 rgba(255, 227, 179, 0.28), inset 0 -12px 18px -8px rgba(0, 0, 0, 0.5), 0 1px… | inset 0 1px 0 #FFFFFF, inset 0 -12px 18px -8px rgba(120, 70, 20, 0.18), 0 1px 0 rgba(120, … |
| --raised-hit | materials | inset 0 1px 0 rgba(255, 227, 179, 0.20), inset 0 -12px 18px -8px rgba(0, 0, 0, 0.55), 0 0 … | inset 0 1px 0 #FFFFFF, inset 0 -12px 18px -8px rgba(120, 70, 20, 0.22), 0 0 0 2px var(--ac… |
| --gloss | materials | radial-gradient(70% 60% at 30% 0%, rgba(255, 255, 255, 0.16), rgba(255, 255, 255, 0) 70%) | radial-gradient(70% 60% at 30% 0%, rgba(255, 255, 255, 0.7), rgba(255, 255, 255, 0) 70%) |
| --gloss-strong | materials | radial-gradient(60% 50% at 35% 0%, rgba(255, 255, 255, 0.55), rgba(255, 255, 255, 0) 70%) | |
| --recessed-bg | materials | #1F1510 | #EBD3AC |
| --recessed-shadow | materials | inset 0 3px 6px rgba(0, 0, 0, 0.6), inset 0 1px 0 rgba(0, 0, 0, 0.5), inset 0 -1px 0 rgba(… | inset 0 3px 6px rgba(120, 70, 20, 0.28), inset 0 1px 0 rgba(120, 70, 20, 0.18), inset 0 -1… |
| --recessed-shadow-deep | materials | inset 0 5px 10px rgba(0, 0, 0, 0.7), inset 0 1px 0 rgba(0, 0, 0, 0.6), inset 0 -1px 0 rgba… | inset 0 5px 10px rgba(120, 70, 20, 0.32), inset 0 1px 0 rgba(120, 70, 20, 0.22), inset 0 -… |
| --recessed-lit | materials | inset 0 3px 6px rgba(0, 0, 0, 0.6), inset 0 -1px 0 var(--accent), inset 0 -14px 24px -14px… | inset 0 3px 6px rgba(120, 70, 20, 0.28), inset 0 -1px 0 var(--accent), inset 0 -14px 24px … |
| --scrim | materials | rgba(34, 23, 15, 0.78) | rgba(246, 227, 196, 0.80) |
| --chevron | materials | url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='8'… | url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='8'… |
| --font-display | type | "Control Meter", "IBM Plex Sans Condensed", "Arial Narrow", sans-serif | |
| --font-body | type | "Figtree", system-ui, sans-serif | |
| --display-weight | type | 700 | |
| --text-xs | type | .75rem | |
| --text-sm | type | .875rem | |
| --text-md | type | 1.0625rem | |
| --text-lg | type | 1.1875rem | |
| --text-xl | type | 1.5rem | |
| --text-h3 | type | 1.75rem | |
| --text-h2 | type | clamp(2.2rem, 4.4vw, 3.8rem) | |
| --text-display | type | clamp(3rem, 7vw, 6.4rem) | |
| --text-price | type | 3rem | |
| --track-caps | type | .16em | |
| --leading-tight | type | .98 | |
| --leading-body | type | 1.55 | |
| --radius | shape | 22px | |
| --radius-sm | shape | 14px | |
| --radius-pill | shape | 999px | |
| --rule | shape | 1px | |
| --space-1 | space | .25rem | |
| --space-2 | space | .5rem | |
| --space-3 | space | .75rem | |
| --space-4 | space | 1rem | |
| --space-5 | space | 1.5rem | |
| --space-6 | space | 2rem | |
| --space-7 | space | 3rem | |
| --space-8 | space | 4.5rem | |
| --space-9 | space | 7rem | |
| --wrap | space | 1200px | |
| --control | space | 50px | |
| --control-sm | space | 38px | |
| --icon | space | 22px | |
| --dur-fast | motion | 160ms | |
| --dur | motion | 420ms | |
| --dur-slow | motion | 820ms | |
| --ease | motion | cubic-bezier(.2, .7, .2, 1) | |
| --ease-fan | motion | cubic-bezier(.16, 1, .3, 1) | |
| --reveal-y | motion | 0px |