Default
A cloud with a word on the sky above it.
Look 16, the kit sheet
Blue sky, white type, one word written by a plane. Clouds you can press, clearings for anything chosen, one ink key per screen. Everything below is the real markup from sections/ and components/. If a page built from the look disagrees with this sheet, this sheet wins.
The palette
The sky is a gradient, never an image. The type is white. The cloud is white with a grey-blue underside. The clearing is the sky, deeper. The ink is the one dark thing on a screen. At night the sky goes navy and the ink goes white.
linear-gradient(180deg, #2A5FE0 0%, #3F86EA 46%, #6FB9F6 100%)#3F86EA#FFFFFF#FFFFFF#0B1F4Dlinear-gradient(180deg, #FFFFFF 0%, #F7FAFE 58%, #E4EDFA 100%)rgba(5, 32, 98, 0.34)rgba(255, 255, 255, 0.92)Type
Contrail is the original face drawn for this look: a monoline connected script, one line of smoke, two cuts, bundled in fonts/. It sets exactly one word per headline and the mark, never a paragraph. Albert Sans, from Google Fonts, sets everything else. The scale is closed.
Give your ideas room to breathe.
Fifty, then retired.
The cloud and the clearing
sky breathe retired hello
sky breathe retired hello
$125one of fifty
A locked look for sites built with Claude Code. One folder, one prompt, fifty copies.
Plain words drift in. Then the script word writes itself on, left to right, the way smoke arrives behind a plane.
Look 16 from Bandana
The two materials
Raised is a cloud: a lit top, a grey-blue underside, a shadow on the sky, no hairline. Recessed is a clearing: a well of deeper sky. Keys are clouds. Fields are clearings. Press a cloud and it becomes a clearing. Nothing turns a colour.
Motion
Plain words drift in from the left (.bl-words). Then the script word writes itself on, left to right, soft-edged like smoke. Blocks drift in (.bl-reveal, staggered by .bl-stagger). Eyebrows, ledes and key rows follow (.bl-rise). Clouds lift on hover (.bl-hover-lift). The sky comes up with the page (.bl-hero__film). Reduced motion lands everything instantly.
.bl-reveal .bl-words .bl-riseReplay
Give your ideas room to breathe.
Click to play it again.
.bl-skeleton .bl-spinner .bl-progressThe twelve lines
Every icon is a single path, stroked at two, round caps, in currentColor. The pen never leaves the sky. Use them in a clearing (.bl-icon-well) or bare.
Components
Helper classes (.is-hover, .is-focus, .is-active, .is-selected, .is-disabled, .is-loading, .is-invalid) draw each state without a pointer. theme.css styles the helper and the real pseudo-class identically.
components/buttons.htmlKeys are pills of cloud. The primary is the ink, the one dark thing on a screen. Hover lifts; pressed goes to the clearing. Every state drawn with helper classes.
components/inputs.htmlFields are clearings: pills of deeper sky, a white ring when focused, a red ring when invalid. On a cloud the labels go ink. Every state drawn.
That is not a whole address.
One line is enough.
components/cards.htmlA card is a cloud with its media on top. Media is a patch of sky, with or without a word. Hover lifts; selected becomes a clearing.
components/badges.htmlSmall clouds. Status colours live here and in toasts and field errors, nowhere else. The quiet badge is a small clearing.
components/tabs.htmlA row of tabs on one cloud. The active tab is a clearing. Hover and focus drawn.
components/accordion.htmlA stack of clouds; the open one is a clearing. Native details, so it works without script. Open drawn with the attribute and with .is-active.
The open item sits in a clearing and its plus becomes a line.
Closed items are clouds.
The same state by helper class.
components/modal.htmlA cloud over a darkened sky. The close key is a small clearing. The static modifier renders it inline here.
One folder, one prompt, one of fifty. The licence covers every site wearing this look.
components/toast.htmlA small cloud with a dot of status. Sits bottom right; the static modifier renders it inline here.
components/table.htmlRows on a cloud with a hairline between them, the only hairline in the look. Hover tints; the selected row is a clearing. Numbers are tabular.
| Look | Word | Sold | Left |
|---|---|---|---|
| Public Record | sky | 0 | 50 |
| Hover | breathe | 12 | 38 |
| Selected | retired | 50 | 0 |
| Another | hello | 3 | 47 |
Sections
Variant A is what the demo uses. Variant B is the alternative for the same job. Page recipes and where the ink key falls are in CLAUDE.md.
Variant A
Variant B
sections/hero.htmlThe opening screen. A is the sky, full bleed: the skywriter behind everything (the still until the film lands), the mast over it, the words on the left. The headline is plain Albert Sans with one word in Contrail, and that word writes itself on after the others have drifted in. B is the split hero for inner pages: headline left, three clearings right, no film.
Variant A
Look 16 from Bandana
Public Record is a locked look for sites built with Claude Code. A sky for a canvas, clouds you can press, one word per headline written by a plane. One folder, one prompt, fifty copies, then retired.
Variant B
Look 16, inner page
The split hero. Headline on the left, three clearings on the right, one ink key. For pricing, about and work pages.
sections/feature-grid.htmlThe parts of the look, three across, each on a cloud with one line icon in a clearing. A is the six-up grid with a section head. B is the row of three with the head on the left, for inner pages.
Variant A
The parts
One folder. Every part in it is drawn for this look and for nothing else.
Every headline is Albert Sans with one word in Contrail, the script drawn for this look. Never two words. Never a paragraph.
Cards and keys are clouds: a lit top, a grey underside, a shadow on the sky. No hairline, no glass. Press one and it goes to the clearing.
Fields, the current link, the chosen plan: a well of deeper sky. Anything selected sits in it. State is depth, never a colour.
The same sky, twice. Day is the native scheme; night turns it navy and the ink key turns white. One attribute.
Plain words drift in. Then the script word writes itself on, left to right, the way smoke arrives behind a plane. Reduced motion lands it at once.
Twelve icons, one continuous line each, never lifted. Plane, loop, cloud, sun, word, wind, kite, banner, horizon, glide, balloon, dive.
Variant B
Three parts
Raised. Cards, keys, the plan you have not chosen yet.
Recessed. Fields, the current page, the plan you chose.
The canvas. It never carries a card's colour and it is never covered.
sections/bento.htmlThe look, laid out on clouds of different sizes. Each tile's art is one of the look's own parts: a script word on the sky, the cloud and the clearing side by side, the day and night skies, the twelve lines, the write replaying. A is the full bento; B is the two-tile band for inner pages.
Variant A
The rules
One gradient, deep at the top and pale at the horizon, fixed behind the whole page. Nothing is ever laid over it but clouds and words.
Raised is a cloud. Recessed is a clearing. There is no third.
The same page under the same sky, at two hours. Only colour tokens change.
Every icon is a single path. So is every letter of the script.
The only dark thing on the page is the key you are meant to press. Everything else is white on blue.
Frosted glass, hairlines, gradients on text, a second script word in a headline, black, exclamation marks, stock clouds and a drop shadow standing in for a cloud.
Variant B
One per headline, in Contrail, a size up from the rest.
Press a cloud and it becomes a clearing. That is the only state change there is.
sections/gallery.htmlThe imagery at full size: three crops of the skywriter still (assets/gallery/*.webp, inlined by the demo builder) and three words written on the sky. A is the six-up grid with captions; B is the wide three-up band.
Variant A
The sky
The signature image is a skywriter finishing a loop. The hero film is the same plane finishing the same loop, and starting again.
The plane
Fifty copies
The loop
The tail
The other scheme
The whole line
Variant B
sections/pricing.htmlThe editions. Three clouds; the chosen plan sits in a clearing, because anything chosen is recessed. Prices are the real ones. A is the three-up with the head above; B is the row for inner pages.
Variant A
Editions
Every look is sold fifty times and then archived for good. A new look takes its place. Yours stays yours.
One look
$125
Three looks
$300 $100 each
Five looks
$425 $85 each
Variant B
sections/testimonial.htmlNo invented praise. The quotes are the look's own rules, pulled out and set large, each with one script word. A is three quotes on clouds; B is one quote, wide, on the sky.
Variant A
From the rules
One word per headline. If you want two, you want a different look.
Press a cloud and it becomes a clearing. Nothing turns a colour.
The sky is never covered. Sections have no background of their own.
Variant B
Every headline gets one word in the sky.
sections/faq.htmlQuestions, answered short. The accordion is a stack of clouds; the open one is a clearing. A is head-left, list-right; B is the single column.
Variant A
Questions
One folder: CLAUDE.md, theme.css, motion.css, eleven sections in two variants, ten components in every state, the kit sheet, the demo, twelve icons, the hero film and both cuts of Contrail. You paste one prompt and Claude builds in it.
No. One word, marked with an i tag. CLAUDE.md stops Claude if it tries for two.
The sky is a gradient token, so yes, and it costs nothing to load. The skywriter still and film are yours to use on sites wearing the look.
The look is archived and never sold again. Your copy keeps working, keeps its licence, and keeps getting its fixes.
You can change any token. But the sky is the look, and a green one is a different afternoon.
Variant B
npx bandana add public-record with your licence key, then paste the starter prompt from CLAUDE.md.
Within seven days, if the look has not been installed. Editions are counted, so a returned copy goes back on the rack.
sections/cta.htmlThe last ask. A is on the open sky, the headline with its one word, the ink key. B is a band on a cloud for inner pages.
Variant A
One of fifty
Public Record, $125. One folder, one prompt, and every headline you write from now on gets its word.
Variant B
Public Record retires at fifty. This is one of them.
sections/contact-form.htmlA form on a cloud, the fields in clearings, one ink key. A is the two-column form with a head; B is the single email line for the footer or a drop list.
Variant A
Write
A question about the look, the licence, or the rack. Short answers, within the day.
Variant B
Variant A
Variant B
Tokens, for reference
Day values first; night overrides the colour tokens only. The same list is in theme.json.
| Token | Group | Day | Night |
|---|---|---|---|
| --pattern | aura | linear-gradient(180deg, #2A5FE0 0%, #3F86EA 46%, #6FB9F6 100%) | linear-gradient(180deg, #06113A 0%, #0E2360 52%, #1B3F8E 100%) |
| --bg | canvas | #3F86EA | #0E2360 |
| --surface | canvas | #FFFFFF | #E6ECF8 |
| --surface-2 | canvas | #EAF2FD | #CFDCF2 |
| --text | canvas | #FFFFFF | #FFFFFF |
| --text-2 | canvas | rgba(255, 255, 255, 0.80) | rgba(255, 255, 255, 0.78) |
| --text-3 | canvas | rgba(255, 255, 255, 0.58) | rgba(255, 255, 255, 0.54) |
| --line | canvas | rgba(255, 255, 255, 0.24) | rgba(255, 255, 255, 0.20) |
| --accent | accent | #0B1F4D | #FFFFFF |
| --accent-ink | accent | #FFFFFF | #0B1F4D |
| --accent-line | accent | rgba(255, 255, 255, 0.55) | rgba(255, 255, 255, 0.45) |
| --accent-glow | accent | rgba(11, 31, 77, 0.30) | rgba(255, 255, 255, 0.25) |
| --accent-bg | accent | linear-gradient(180deg, #1C3470 0%, #0B1F4D 60%, #071538 100%) | linear-gradient(180deg, #FFFFFF 0%, #F3F7FE 60%, #DCE6F7 100%) |
| --accent-bg-up | accent | linear-gradient(180deg, #2A4585 0%, #14295E 60%, #0B1F4D 100%) | linear-gradient(180deg, #FFFFFF 0%, #FFFFFF 60%, #E8EFFB 100%) |
| --accent-shadow | accent | inset 0 1px 0 rgba(255, 255, 255, 0.22), inset 0 -8px 14px -10px rgba(0, 0, 0, 0.5), 0 14p… | inset 0 1px 0 #FFFFFF, inset 0 -8px 14px -10px rgba(46, 96, 180, 0.35), 0 14px 30px -12px … |
| --accent-shadow-up | accent | inset 0 1px 0 rgba(255, 255, 255, 0.28), inset 0 -8px 14px -10px rgba(0, 0, 0, 0.45), 0 22… | inset 0 1px 0 #FFFFFF, inset 0 -8px 14px -10px rgba(46, 96, 180, 0.28), 0 22px 40px -14px … |
| --ok | status | #2F9E6B | #6FD3A0 |
| --warn | status | #E0A62A | #F0C15A |
| --err | status | #E0533F | #F0806E |
| --raised-bg | materials | linear-gradient(180deg, #FFFFFF 0%, #F7FAFE 58%, #E4EDFA 100%) | linear-gradient(180deg, #F2F5FC 0%, #E3EAF7 58%, #CBD8EF 100%) |
| --raised-bg-up | materials | linear-gradient(180deg, #FFFFFF 0%, #FCFDFF 58%, #EEF4FC 100%) | linear-gradient(180deg, #FAFBFE 0%, #EEF2FA 58%, #D9E3F4 100%) |
| --raised-flat | materials | #FFFFFF | #E3EAF7 |
| --raised-ink | materials | #0B1F4D | #0B1F4D |
| --raised-ink-2 | materials | rgba(11, 31, 77, 0.68) | rgba(11, 31, 77, 0.68) |
| --raised-ink-3 | materials | rgba(11, 31, 77, 0.46) | rgba(11, 31, 77, 0.46) |
| --raised-line | materials | rgba(11, 31, 77, 0.12) | rgba(11, 31, 77, 0.12) |
| --raised-shadow | materials | inset 0 1px 0 #FFFFFF, inset 0 -12px 20px -14px rgba(46, 96, 180, 0.34), 0 2px 6px -2px rg… | inset 0 1px 0 #FFFFFF, inset 0 -12px 20px -14px rgba(46, 96, 180, 0.40), 0 2px 6px -2px rg… |
| --raised-shadow-up | materials | inset 0 1px 0 #FFFFFF, inset 0 -12px 20px -14px rgba(46, 96, 180, 0.26), 0 4px 10px -2px r… | inset 0 1px 0 #FFFFFF, inset 0 -12px 20px -14px rgba(46, 96, 180, 0.32), 0 4px 10px -2px r… |
| --raised-hit | materials | inset 0 1px 0 #FFFFFF, inset 0 -12px 20px -14px rgba(46, 96, 180, 0.34), 0 0 0 4px var(--a… | inset 0 1px 0 #FFFFFF, inset 0 -12px 20px -14px rgba(46, 96, 180, 0.40), 0 0 0 4px var(--a… |
| --gloss | materials | radial-gradient(80% 60% at 30% 0%, rgba(255, 255, 255, 0.9), rgba(255, 255, 255, 0) 70%) | radial-gradient(80% 60% at 30% 0%, rgba(255, 255, 255, 0.7), rgba(255, 255, 255, 0) 70%) |
| --recessed-bg | materials | rgba(5, 32, 98, 0.34) | rgba(0, 8, 40, 0.50) |
| --recessed-shadow | materials | inset 0 3px 8px rgba(3, 18, 60, 0.45), inset 0 1px 0 rgba(3, 18, 60, 0.30), 0 1px 0 rgba(2… | inset 0 3px 8px rgba(0, 0, 0, 0.55), inset 0 1px 0 rgba(0, 0, 0, 0.4), 0 1px 0 rgba(255, 2… |
| --recessed-shadow-deep | materials | inset 0 5px 12px rgba(3, 18, 60, 0.55), inset 0 1px 0 rgba(3, 18, 60, 0.36), 0 1px 0 rgba(… | inset 0 5px 12px rgba(0, 0, 0, 0.65), inset 0 1px 0 rgba(0, 0, 0, 0.45), 0 1px 0 rgba(255,… |
| --recessed-lit | materials | inset 0 3px 8px rgba(3, 18, 60, 0.45), inset 0 0 0 2px rgba(255, 255, 255, 0.55), 0 1px 0 … | inset 0 3px 8px rgba(0, 0, 0, 0.55), inset 0 0 0 2px rgba(255, 255, 255, 0.5), 0 1px 0 rgb… |
| --recessed-ink | materials | #FFFFFF | #FFFFFF |
| --scrim | materials | rgba(10, 40, 120, 0.55) | rgba(3, 12, 45, 0.6) |
| --chevron | materials | url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='8'… | |
| --hero-scrim | other | linear-gradient(90deg, rgba(20, 70, 170, 0.50) 0 18%, rgba(20, 70, 170, 0.22) 42%, rgba(20… | linear-gradient(90deg, rgba(4, 14, 50, 0.55) 0 18%, rgba(4, 14, 50, 0.25) 42%, rgba(4, 14,… |
| --hero-text | other | #FFFFFF | #FFFFFF |
| --hero-text-2 | other | rgba(255, 255, 255, 0.82) | rgba(255, 255, 255, 0.80) |
| --smoke | other | rgba(255, 255, 255, 0.92) | rgba(255, 255, 255, 0.86) |
| --chevron-ink | other | url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='8'… | |
| --script-scale | other | 1.12 | |
| --font-display | type | "Contrail", "Brush Script MT", cursive | |
| --font-body | type | "Albert Sans", system-ui, sans-serif | |
| --display-weight | type | 500 | |
| --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(2.9rem, 6.6vw, 6rem) | |
| --text-price | type | 3rem | |
| --track-caps | type | .14em | |
| --leading-tight | type | 1.02 | |
| --leading-body | type | 1.55 | |
| --radius | shape | 24px | |
| --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 | 440ms | |
| --dur-slow | motion | 900ms | |
| --dur-write | motion | 1400ms | |
| --ease | motion | cubic-bezier(.2, .7, .2, 1) | |
| --ease-drift | motion | cubic-bezier(.22, 1, .36, 1) | |
| --reveal-y | motion | 0px | |