Butter
Pastille, one of twelve.
Look 08, the kit sheet
Sweets in a tray. 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#FBFAF7#FFFFFF#FFFFFF#2C2B3A#B43B33#FFF3EEradial-gradient(120% 100% at 16% 10%, rgba(255, 255, 255, 0.34), rgba(255, 255, 255, 0.04)…#7E2620inset 1.5px 1.5px 0 rgba(255, 255, 255, 0.45), inset -6px -8px 14px rgba(0, 0, 0, 0.12), 0…inset 1.5px 1.5px 0 rgba(255, 255, 255, 0.5), inset -6px -8px 14px rgba(0, 0, 0, 0.1), 0 6…#4F7F55#B9861E#B43B33Decoration only. The twelve pastilles as tokens, the sand as the pattern, the grain over everything, and one photograph: the tray still, for the hero film, the bento art and the corner of the call to action. Never behind text, and never a second photograph.
#C8DDD0#F0C9C8#2C2B3A#E0B995#F1E08C#5C7A5D#9095BF#F4F2EC#DD8470#6C999B#B43B33#C8ABD1#D9D0BE#ECE8DF#F3F0E9linear-gradient(135deg, #E5DDCD 0%, #D9D0BE 55%, #CBC1AD 100%)inlinedinlined0.7Type
Static Round is the original face drawn for this look and ships in fonts/. The scale is closed: eyebrow, display, h2, lede, body, meta, price.
Sweets in a tray.
Every colour, one at a time.
$125one of fifty
A look for sites built with Claude Code. A tray of pressed pastilles on sand, one window over the page, and the scroll carries the light.
Raised is a pressed pastille with a lit rim, its own thickness and one long shadow that follows the window. Recessed is the dimple it was lifted from. There is no third material, and state is depth, never a colour.
Look 08, an edition of fifty
Materials
Icons
24-unit grid, one to three solid pads in two tones of currentColor, no strokes, the shadow always down and to the right. Use inline as <svg class="bl-icon"><use href="#i-name"/></svg> or as the files in assets/icons/.
Motion
Nothing on the page moves except its shadow. One window, and the scroll carries it across the room: every shadow token is built on --light, so every pastille's shadow swings as you scroll (the demo script writes --light). Headlines are lifted out of the tray word by word (.bl-words). Blocks are set down (.bl-reveal, staggered by .bl-stagger). Eyebrows and ledes follow (.bl-rise). Cards lift (.bl-hover-lift). Buttons lift on hover and sink to the tray when pressed. Reduced motion pins the window and lands everything instantly.
.bl-reveal .bl-words .bl-rise .bl-rise--x .bl-rise--late .bl-hover-liftReplay
Sweets in a tray.
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 pastilles. Primary is the brick, the one accent; default is white. Small is for the mast and dense rows. Pressed sinks to the tray (.is-active), hover lifts (.is-hover), focus rings in brick (.is-focus), disabled fades (.is-disabled). Every state is drawn statically with .is-hover, .is-active, .is-focus, .is-disabled, .is-selected, .is-invalid; theme.css styles the helper class and the real pseudo-class identically. Fragment. Assumes data-look="sugar-static" on an ancestor, theme.css and motion.css loaded, and the icon sprite present.
components/buttons.htmlEvery field is a dimple in the tray. Focus rings in brick, invalid rings in the error red, disabled fades. Selects carry the chevron; textareas are taller dimples. Every state is drawn statically with .is-hover, .is-active, .is-focus, .is-disabled, .is-selected, .is-invalid; theme.css styles the helper class and the real pseudo-class identically. Fragment. Assumes data-look="sugar-static" on an ancestor, theme.css and motion.css loaded, and the icon sprite present.
components/inputs.htmlThat is not an email address.
We answer within a day.
A card is a pastille with something inside. Media cards carry the pattern or one pastille of colour; a selected card is sunk to the tray. Every state is drawn statically with .is-hover, .is-active, .is-focus, .is-disabled, .is-selected, .is-invalid; theme.css styles the helper class and the real pseudo-class identically. Fragment. Assumes data-look="sugar-static" on an ancestor, theme.css and motion.css loaded, and the icon sprite present.
components/cards.htmlPastille, one of twelve.
Lifted off the tray, its shadow grows.
A selected card is recessed. State is depth, never a colour.
Badges are small dimples. Status colours live here and in toasts and field errors, nowhere else. Every state is drawn statically with .is-hover, .is-active, .is-focus, .is-disabled, .is-selected, .is-invalid; theme.css styles the helper class and the real pseudo-class identically. Fragment. Assumes data-look="sugar-static" on an ancestor, theme.css and motion.css loaded, and the icon sprite present.
components/badges.htmlTabs sit in one long dimple; the active tab is a pastille pressed down into it. Every state is drawn statically with .is-hover, .is-active, .is-focus, .is-disabled, .is-selected, .is-invalid; theme.css styles the helper class and the real pseudo-class identically. Fragment. Assumes data-look="sugar-static" on an ancestor, theme.css and motion.css loaded, and the icon sprite present.
components/tabs.htmlThe open question is a dimple; the closed ones are pastilles. Draw the open state with [open] or .is-active. Every state is drawn statically with .is-hover, .is-active, .is-focus, .is-disabled, .is-selected, .is-invalid; theme.css styles the helper class and the real pseudo-class identically. Fragment. Assumes data-look="sugar-static" on an ancestor, theme.css and motion.css loaded, and the icon sprite present.
components/accordion.htmlThe modal is a pastille lifted highest of all, over the scrim. Drawn inline with --static. Every state is drawn statically with .is-hover, .is-active, .is-focus, .is-disabled, .is-selected, .is-invalid; theme.css styles the helper class and the real pseudo-class identically. Fragment. Assumes data-look="sugar-static" on an ancestor, theme.css and motion.css loaded, and the icon sprite present.
components/modal.htmlFifty are gone. The look leaves the rack and never comes back.
Toasts are small pastilles at the foot of the page. The dot carries the status colour. Every state is drawn statically with .is-hover, .is-active, .is-focus, .is-disabled, .is-selected, .is-invalid; theme.css styles the helper class and the real pseudo-class identically. Fragment. Assumes data-look="sugar-static" on an ancestor, theme.css and motion.css loaded, and the icon sprite present.
components/toast.htmlThe table is one pastille with hairlines inside. A selected row is a dimple. Every state is drawn statically with .is-hover, .is-active, .is-focus, .is-disabled, .is-selected, .is-invalid; theme.css styles the helper class and the real pseudo-class identically. Fragment. Assumes data-look="sugar-static" on an ancestor, theme.css and motion.css loaded, and the icon sprite present.
components/table.html| Look | Edition | Left | Price |
|---|---|---|---|
| Sugar Static | 08 | 50 | $125 |
| Blue Hour | 06 | 41 | $125 |
| Cold Open | 07 | 47 | $125 |
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 tray: the headline on the sand and the film beside it in a raised pad cut by the right edge of the screen (the home page, once per site). The video carries the film (../motion/sugar-static-hero.mp4) with its poster; reduced motion shows the poster alone. In a site, point the poster and the film at /looks/sugar-static/motion/; ../motion/ is for the kit and the demo only. B is the split for inner pages: a headline on the sand and four pads beside it, three pastilles and one dimple.
sections/hero.htmlVariant A
Bandana · Look 08 · one of fifty
Every surface is a pressed pastille on sand, lit from one window. Scroll, and the light moves across the room; nothing else does. A look for sites built with Claude Code.
Variant B
The parts
Every colour, radius, shadow and duration in Sugar Static is a token. Claude uses them or stops. Nothing is invented twice.
The parts, or any list of three to six things. A is the grid: each part is a raised card with its own pastille chip as the mark. B is the numbered list beside a head, for rules and steps.
sections/feature-grid.htmlVariant A
The parts
A look is a folder. Claude reads it first and obeys it after. Every colour, radius, shadow and duration is a token; every surface is one of two materials; every page is built from the same eleven sections.
Sand, ink, twelve pastilles and one brick. Nothing is typed twice, so nothing drifts.
Raised is a pastille with its own thickness. Recessed is the dimple it was lifted from. There is no third.
The brick pastille lands once per screen, on the thing that matters. Everything else stays on the sand.
An original display face, drawn for this look and bundled with it. Soft corners, soft ends, never for body copy.
One window over the page. As you scroll, every shadow swings with it. Nothing else on the page moves.
By day the tray is almost white. By night it is the navy pastille, and the twelve keep their colours.
Variant B
How it is built
The short version of CLAUDE.md. The long version is in the folder.
Every value is a custom property on the look. If the one you need is missing, the look is missing a part. Stop and say so.
Raised is a pastille, recessed is its dimple. Buttons are raised, fields are recessed, anything selected is recessed.
The brick lands once per screen. The twelve pastilles are decoration and product colour, never interface.
Static Round for headlines, the mark, prices and big numbers. Manrope for everything that is read.
Mixed tiles in one tray. A leads with the art tile (the tray still, the one photograph the look allows) plus three pads, one of them a dimple. B is six pads without the art, for inner pages.
sections/bento.htmlVariant A
Twelve pastilles on sand, the signature image. It is the tile on the rack, the poster in the hero and the film behind it.
One command, one pasted prompt. The folder goes in, the look comes out.
Every button is a pastille. Press it and it sinks to the tray, then comes back.
Each look is sold fifty times and archived forever. A new look is built to replace it. This is edition one of fifty.
Variant B
Where a pastille was lifted out. Fields, the current link, the chosen plan, the open question: all dimples.
Two cuts, drawn for the look, bundled and never sold apart.
Small reliefs of pastilles. Two tones, no strokes.
Day is almost white. Night is the navy pastille.
Reveals, hovers, a loader, and the sundial.
Paste the starter prompt. Claude reads CLAUDE.md, then builds every page from the same eleven sections and ten components.
Colour, as product. A is the twelve pastilles as swatches with their hex. B is four large swatches with prices, the shop grid.
sections/gallery.htmlVariant A
The twelve
The pastilles are decoration and product colour, never interface. A card may carry one. A page carries one brick.
C8DDD0F0C9C82C2B3AE0B995F1E08C5C7A5D9095BFF4F2ECDD84706C999BB43B33C8ABD1Variant B
Four of the twelve
On a shop page a card carries one pastille as its colour. The card stays white; the pastille does the talking.
The editions. A is the three plans, the chosen one recessed. B is two plans for a simpler page. The prices are the real ones: $125, three for $300, five for $425.
sections/pricing.htmlVariant A
Editions
One look, or a few. Each is its own edition of fifty, and each comes with its own face, its own icons and its own film.
One look
$125
Three looks
$300 $100 each
Five looks
$425 $85 each
Variant B
Editions
One look
$125
Three looks
$300 $100 each
Quotes. A is two raised cards, each cited with a chip. B is one bare quote in the display face, for a breath between sections.
sections/testimonial.htmlVariant A
State is depth, never a colour. Pressed is recessed. Selected is recessed. The open question is recessed.
CLAUDE.md, the rules
If a token, a section or a component does not exist, stop and say so. Do not invent one. The tray has twelve pastilles, not thirteen.
CLAUDE.md, rule 2
Variant B
Nothing on the page moves except its shadow.
motion.css, the first line
Questions. A is the accordion beside a head, the open question sunk into the tray. B is the two-column grid of short answers, no interaction.
sections/faq.htmlVariant A
Questions
Short answers. The long ones are in the folder.
Variant B
Questions
One folder: CLAUDE.md, the stylesheets, Static Round, twelve icons, eleven sections, ten components, the kit sheet, the demo and the film.
npx bandana add sugar-static with your key, then paste the starter prompt into Claude Code.
No. Static Round is licensed for sites wearing Sugar Static, never sold apart, never redistributed.
The look is retired and never sold again. Your site keeps it. A new look takes its place on the rack.
The close. A is the big dimple with the tray still tilted into its corner and the brick pastille. B is the bar, one line and one button, for the foot of inner pages.
sections/cta.htmlVariant A
Edition of fifty
Sugar Static, $125. One site, forever, and fifty of them in the world.
Variant B
Variant A
Variant B
The form. A is the card form beside a head. B is the bare form under a head, for a contact page. Every field is a dimple; the button is a pastille.
sections/contact-form.htmlVariant A
Contact
Licensing, a site that needs more than one, or a question the folder does not answer.
Variant B
Contact
Tokens
Native values first; the dark scheme overrides only the colour tokens. The same list is in theme.json.
| Token | Group | Native | dark |
|---|---|---|---|
| --bg | canvas | #FBFAF7 | #2C2B3A |
| --surface | canvas | #FFFFFF | #3D3C50 |
| --surface-2 | canvas | #FFFFFF | #4A495F |
| --text | canvas | #2C2B3A | #F3F1EC |
| --text-2 | canvas | rgba(44, 43, 58, 0.68) | rgba(243, 241, 236, 0.7) |
| --text-3 | canvas | rgba(44, 43, 58, 0.46) | rgba(243, 241, 236, 0.46) |
| --line | canvas | rgba(44, 43, 58, 0.10) | rgba(243, 241, 236, 0.12) |
| --accent | accent | #B43B33 | #D2493F |
| --accent-ink | accent | #FFF3EE | #FFF3EE |
| --accent-bg | accent | radial-gradient(120% 100% at 16% 10%, rgba(255, 255, 255, 0.34), rgba(255, 255, 255, 0.04)… | radial-gradient(120% 100% at 16% 10%, rgba(255, 255, 255, 0.3), rgba(255, 255, 255, 0.04) … |
| --accent-side | accent | #7E2620 | #8A2A24 |
| --accent-shadow | accent | inset 1.5px 1.5px 0 rgba(255, 255, 255, 0.45), inset -6px -8px 14px rgba(0, 0, 0, 0.12), 0… | |
| --accent-shadow-up | accent | inset 1.5px 1.5px 0 rgba(255, 255, 255, 0.5), inset -6px -8px 14px rgba(0, 0, 0, 0.1), 0 6… | |
| --mint | aura | #C8DDD0 | |
| --blush | aura | #F0C9C8 | |
| --navy | aura | #2C2B3A | |
| --peach | aura | #E0B995 | |
| --butter | aura | #F1E08C | |
| --forest | aura | #5C7A5D | |
| --periwinkle | aura | #9095BF | |
| --popcorn | aura | #F4F2EC | |
| --coral | aura | #DD8470 | |
| --teal | aura | #6C999B | |
| --brick | aura | #B43B33 | |
| --lilac | aura | #C8ABD1 | |
| --sand | aura | #D9D0BE | |
| --sand-2 | aura | #ECE8DF | #22212E |
| --sand-lit | aura | #F3F0E9 | #3A394C |
| --pattern | aura | linear-gradient(135deg, #E5DDCD 0%, #D9D0BE 55%, #CBC1AD 100%) | linear-gradient(135deg, #3A394C 0%, #2C2B3A 55%, #1F1E2A 100%) |
| --tray | aura | file assets/tray.webp | |
| --tray-ratio | aura | 4 / 3 | |
| --grain | aura | url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='2… | |
| --light | aura | 0.7 | |
| --ok | status | #4F7F55 | #8FC79A |
| --warn | status | #B9861E | #E7BA5A |
| --err | status | #B43B33 | #F08A80 |
| --sx | other | calc(var(--light) * 22px) | |
| --sy | other | 26px | |
| --sx-up | other | calc(var(--light) * 30px) | |
| --sy-up | other | 36px | |
| --shade | other | rgba(60, 50, 30, 0.18) | rgba(0, 0, 0, 0.5) |
| --shade-soft | other | rgba(60, 50, 30, 0.08) | rgba(0, 0, 0, 0.25) |
| --raised-bg | materials | radial-gradient(120% 100% at 16% 10%, rgba(255, 255, 255, 0.55), rgba(255, 255, 255, 0.06)… | radial-gradient(120% 100% at 16% 10%, rgba(255, 255, 255, 0.16), rgba(255, 255, 255, 0.02)… |
| --raised-side | materials | #E4DFD5 | #26253A |
| --raised-shadow | materials | inset 1.5px 1.5px 0 rgba(255, 255, 255, 0.85), inset -6px -8px 14px rgba(60, 50, 30, 0.08)… | |
| --raised-shadow-up | materials | inset 1.5px 1.5px 0 rgba(255, 255, 255, 0.9), inset -6px -8px 14px rgba(60, 50, 30, 0.07),… | |
| --raised-shadow-down | materials | inset 1px 1px 0 rgba(255, 255, 255, 0.6), inset -4px -5px 10px rgba(60, 50, 30, 0.08), 0 2… | |
| --recessed-bg | materials | var(--sand-2) | var(--sand-2) |
| --recessed-shadow | materials | inset calc(var(--sx) * 0.3) 8px 14px rgba(60, 50, 30, 0.18), inset -2px -2px 3px rgba(255,… | inset calc(var(--sx) * 0.3) 8px 14px rgba(0, 0, 0, 0.5), inset -1px -1px 2px rgba(255, 255… |
| --scrim | materials | rgba(44, 43, 58, 0.5) | rgba(10, 9, 18, 0.66) |
| --chevron | materials | url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'><… | url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'><… |
| --font-display | type | "Static Round", "Helvetica Neue", Arial, sans-serif | |
| --font-body | type | "Manrope", "Helvetica Neue", Arial, sans-serif | |
| --display-weight | type | 700 | |
| --text-xs | type | 0.75rem | |
| --text-sm | type | 0.875rem | |
| --text-md | type | 1.0625rem | |
| --text-lg | type | 1.25rem | |
| --text-xl | type | 1.75rem | |
| --text-2xl | type | clamp(2rem, 3.6vw, 3rem) | |
| --text-display | type | clamp(2.8rem, 7vw, 6.6rem) | |
| --track-caps | type | 0.22em | |
| --track-display | type | 0.015em | |
| --track-h2 | type | 0.01em | |
| --leading-tight | type | 1 | |
| --leading-body | type | 1.55 | |
| --radius | shape | 30px | |
| --radius-sm | shape | 20px | |
| --radius-pill | shape | 999px | |
| --rule | shape | 1px | |
| --space-1 | space | 0.25rem | |
| --space-2 | space | 0.5rem | |
| --space-3 | space | 0.75rem | |
| --space-4 | space | 1rem | |
| --space-5 | space | 1.5rem | |
| --space-6 | space | 2rem | |
| --space-7 | space | 3rem | |
| --space-8 | space | 5rem | |
| --space-9 | space | 6.5rem | |
| --wrap | space | 1280px | |
| --control | space | 52px | |
| --control-sm | space | 40px | |
| --icon | space | 22px | |
| --dur-fast | motion | 160ms | |
| --dur | motion | 420ms | |
| --dur-slow | motion | 900ms | |
| --ease | motion | cubic-bezier(0.22, 0.8, 0.3, 1) | |
| --ease-lift | motion | cubic-bezier(0.34, 1.3, 0.64, 1) | |
| --reveal-y | motion | 18px |