STYLE.md ·
How Cask works. Every rule, written down.
Breweries, wineries, distilleries and cellar doors, as a website. It has four pieces, and an 18+ check:
- A tasting flight. Pick your pours and a pour size, and it shows each one's standard drinks, the total, and a meter against the guidelines' 4 on any day, with a plain word for drivers.
- A visit planner. A day and a time, how many adults, under-18s and drivers, and how you're getting home (driving, a ride, the shuttle or on foot). It prices the tastings, puts drivers' soft drinks on the house, and won't book a car trip without a driver.
- A bottle shop. Every can and bottle shows its size, ABV and standard drinks, with case prices that apply as you add, delivery free over a threshold, the standard drinks in the order, and the ID-on-delivery promise.
- A tap board. What's pouring, by style, with standard drinks for a pot, a schooner and a pint, and which kegs are nearly gone.
- An 18+ check (
.gate[data-age-gate]) on pages that sell alcohol, remembered for the visitor.
The type is DM Serif Display, Epilogue and Source Code Pro, on cellar-stone paper with ink, one claret and ale-gold amber for fills. A tulip glass is the mark.
Generous · honest · unhurried
Best for
- Breweries, wineries, distilleries and cellar doors. It's written to the ABAC Responsible Alcohol Marketing Code, the drinking guidelines, standard drinks and pregnancy warning labelling, age checks for online sales and delivery, and responsible service (see "Alcohol: what we build in").
- Anyone who pours, books tables or ships drinks:
- pubs and bars (The Railway Hotel: a tap board and a table booking that sorts the ride home)
- bottle shops (Corner Cellars: standard drinks on every bottle, case prices and Saturday tastings)
- cideries, meaderies, kombucha and non-alcoholic drinks makers
- Audiences: day-trippers planning a cellar door crawl, locals after a pint, gift buyers and club members.
Less suited to: a restaurant (Mise), a café (Riso), or anything selling to people under 18.
Personality and voice
Generous and honest, the cellar hand who pours a taste, tells you its strength, and asks who's driving.
- Headlines: "Brewed in the shed, poured fresh." · "Come for a tasting. Get home safe." · "Take some home."
- Buttons: "Book a tasting" · "Book the tasting" · "Yes, I'm 18 or over"
- Microcopy:
- "Shed Lager, 90 mL at 4.4% · 0.3 std drinks"
- "1 driver: soft drinks and a cheese plate, on us"
- "We check ID when we deliver and never leave alcohol unattended."
- Words to avoid: "smashable", "session all day", "strong", "gets you going", "the perfect way to unwind", anything that dares or rewards drinking more, and medals or awards you didn't win.
Colour
| Token | Cellar door (light) | Candlelight (dark) | Role |
|---|---|---|---|
--paper |
#f5f0e8 |
#16110f |
Page |
--card |
#ffffff |
#201a17 |
Flight, planner, shop, taps |
--well |
#ebe3d6 |
#1a1512 |
Alternate sections, bottle shelves |
--line |
#d9cfc0 |
#352c27 |
Hairlines |
--ink / --ink-2 |
#1c1512 / #3d342e |
#f4ede4 / #d8cfc6 |
Text |
--muted |
#5e544c |
#aaa097 |
Meta, fine print |
--claret |
#7b1e3a |
#f2a1b6 |
The one accent: buttons, links, chosen pours and slots, the lit words |
--amber |
#e8a33d |
#e8a33d |
Fills only: the ale wave, bubbles, the standard drinks meter, taps; text on it is ink |
--amber-ink / --amber-soft |
#7a4a00 / #fbefd6 |
#e8a33d / #2b2010 |
Amber as text (standard drinks), and its soft fill (totals) |
--ok |
#1d6b45 |
#7fd6a0 |
Within the guidelines |
--alert |
#b3261e |
#ff9a90 |
Over the guidelines, invalid fields |
Measured contrast (WCAG).
- Cellar door:
- ink on paper 15.9:1
- muted on paper 6.5:1 (5.8:1 on well)
- claret on paper 8.9:1 (7.9:1 on well, 8.0:1 on its soft fill), white on claret 10.1:1
- ink on amber 8.4:1; amber ink 6.6:1 (6.6:1 on its soft fill)
- ok 6.5:1, alert 6.5:1
- Candlelight:
- ink 16.1:1
- muted 7.3:1 (6.7:1 on card)
- claret 9.4:1 (8.6:1 on card), text on claret 8.8:1, claret on its soft fill 8.4:1
- amber 8.7:1 (7.4:1 on its soft fill)
- ok 9.9:1, alert 8.4:1
- Closing card: text 15.9:1, body 12.0:1, amber em 8.6:1, ink on its amber button 8.4:1.
- Example dials: pub green (The Railway, white on green 8.1:1), navy (Corner Cellars, 10.2:1) and shiraz (Nightjar, 12.4:1) all meet AA, light and dark, and so does each closing card.
Typography
- Display: DM Serif Display, 400 with italics. Headlines, names on the taps and bottles, the big totals. A label-printer's serif.
- Body: Epilogue, 400–700. Reading, forms, buttons.
- Mono: Source Code Pro, 400–600. ABV, standard drinks, mL, prices.
| Token | Size | Use |
|---|---|---|
--fs-h1 |
clamp(48px, 6.6vw, 104px) | Page headline |
--fs-h2 |
clamp(34px, 4.2vw, 60px) | Section headline |
--fs-h3 |
22px | Card titles |
--fs-lead |
clamp(17.5px, 1.35vw, 20.5px) | Intro paragraphs |
--fs-body |
16.5px | Body |
The signature move: the lit words rest on a line of ale. Claret italics, with an amber wave that pours in underneath and gently sloshes.
Layout
- Frame: a 1200px wrap with a
max(20px, 4vw)gutter. An ink top line with an amber label; a sticky header with the tulip-glass mark; bubbles rising through a warm haze behind the hero. - Hero: copy on the left; the tasting flight on the right.
- Then: the tap board full width; the visit planner beside its heading; the bottle shop; questions; and a dark closing card with a glass that fills and keeps its head.
Shape
- Crisp:
--r-s6px,--r-m12px,--r-l20px. - Glassware: the tulip mark and tag, the bottles and cans in the shop, the glass in each page head and the closing card are drawn in CSS. No images needed.
Motion language
- Pour: the wave pours in under the lit words and sloshes.
- Flight and shop: the meter fills (and stripes red past the guideline), totals slide in when they change.
- Elsewhere: bubbles rise behind the hero and page heads, the page-head glass swirls, the closing glass fills, the mark tilts on hover, and sections reveal with a rise.
- Motion switch in the footer (
[data-motion-toggle],html.calm, remembered assite-motion, with the default fromprefers-reduced-motion). Calm stops all of it. - Candlelight switch (
[data-theme-toggle]), remembered assite-theme;theme-colorfollows.
Imagery and illustration
Your own brewhouse, vines, barrels and people, with anyone shown clearly 25 or over. The template draws its glasses, cans and bottles in CSS, so nothing is borrowed. No stock "friends cheersing at sunset", nobody drinking near water, a car or a boat, and no awards or medals you can't show the certificate for.
Signature components
- Tasting flight:
.flight[data-flight]withscript[data-fl-data](max,guide,scale,price), containing a[data-fl-pour]segmented control (values in mL),.fl-itemlabels withinput[data-fl-item][data-abv]and[data-fl-sd],[data-fl-count],[data-fl-lines],[data-fl-total],.fl-meterand[data-fl-note]. Standard drinks = litres × ABV × 0.789. - Visit planner:
.visitplan[data-visitplan]withscript[data-vp-data](openweekdays,slots,fullas[day, slot],price(0 makes it a table booking),adults,drivers), containing[data-vp-days],[data-vp-times],[data-vp-step]steppers with[data-vp-n](adults,kids,drivers), a[data-vp-how]segmented control,[data-vp-out],[data-vp-home],[data-vp-book]and[data-vp-msg]. - Bottle shop:
.shop[data-shop]withscript[data-sh-data](key,delivery,freeOver), containing.bottlecards (data-id,data-kindcan or bottle,data-ml,data-abv,data-price,data-case,data-case-price, and--con.pic) with[data-sh-step]buttons and an output,[data-sh-lines]and[data-sh-total]. The order is kept for the tab. - Tap board:
.taps[data-taps]withscript[data-tp-data](poursas[name, mL]), a[data-tp-style]segmented control,[data-tp-count], and.taprows (data-style,data-abv,.lowwhen nearly gone) with.poursand.keg. - 18+ check:
.gate[data-age-gate](withdata-no-text) containing[data-age-yes],[data-age-no]and[data-age-out]; the rest of the page is inert until confirmed, remembered assite-age-ok. - Supporting pieces:
.sd(a standard drinks label),.plan-pair,.card,.facts(--ncolumns, or.stack),.notice,.side-box,.checks,.faq,.close-card(--close-bg,--close-em).
Multi-page kit
- Phone menu:
.menu-btn[aria-controls]opens.site-menu. Escape, an outside click or choosing a link closes it, and Tab stays inside while it's open. - Current page:
aria-current="page", shown as a soft pill. - Inner pages:
.page-head(rising bubbles and a tulip glass),.crumbs, a.tagand a smaller.h1. - Fields:
.field,.fields,.field-wide,fieldset.field-set,.check,.form-card,[aria-invalid="true"];form[data-template]. - Tiles, segmented control, gate, slider, switch, tables:
.choices,.seg,[data-gate],input.range,.switch[role=switch],.table. - Events:
flight(std, picks, pour),visitplan(adults, kids, drivers, how, cost),shop(units, total). - Helper:
Cask.refresh(root), andCask.last, the latest detail of each event, for scripts that load afterwards.
Alcohol: what we build in
We checked these for Australian producers and venues in October 2026:
- The ABAC Responsible Alcohol Marketing Code covers websites, packaging, competitions and influencers. No drinking beyond the guidelines, no promoting strength, no suggesting alcohol brings success, relaxation or a better occasion, no drinking alongside driving, swimming or machinery, and no strong appeal to minors. Paid models and influencers who are adults under 25 can't be shown prominently, and age-restriction tools are used where they exist. Promotions and merchandise follow the same rules.
- The guidelines: no more than 10 standard drinks a week and no more than 4 on any day, and none when pregnant or breastfeeding. Every pour, glass and bottle shows its standard drinks; one is 10 grams of alcohol.
- Labels: the pregnancy warning has been mandatory on alcohol since 31 July 2023.
- Online sales and delivery: sales only to people 18 and over, an age check before shop pages, ID checked on delivery and orders never left unattended. NSW's same-day delivery rules have required age verification at ordering since September 2022.
- Responsible service: staff hold RSA training, ID is checked for anyone who looks under 25, under-18s can't taste or buy, drivers are looked after, and the licence number and the under-18 warning sit in the footer.
These notes are design guidance, not legal advice.
Do and don't
- Do show standard drinks on every pour and product.
- Do ask who's driving, and make the sober choice easy and free.
- Do keep the 18+ check in front of anything you sell.
- Don't promote strength, or present drinking as a dare, a reward or a cure.
- Don't show anyone who looks under 25 prominently, or anything that appeals to kids.
- Don't put text on amber in anything but ink.
Accessibility
- AA contrast throughout (measured above), a skip link and a 3px focus ring.
- 18+ check: a labelled dialog that holds focus, with the page behind it inert until it's answered.
- Flight: pours are labelled checkboxes with their ABV and standard drinks in text; the total and the guideline note are announced; the meter is decoration.
- Planner: days and times are buttons with
aria-pressedand spoken dates; full slots are disabled; the steppers announce their counts; the booking result is announced. - Shop and taps: each stepper button is labelled with the product; totals are announced; standard drinks and keg levels are text.
- Testing: responsive to 360px, and tested with motion on and off, in Cellar door and Candlelight.
How to make it yours
| Dial | Range |
|---|---|
| Accent | Claret (default), pub green (The Railway), navy (Corner Cellars), shiraz (Nightjar). Set --claret, --claret-2, --claret-soft, --focus (plus --on-claret at night), --close-bg and --close-em. |
| Flight | Your range, pour sizes and tasting price. |
| Planner | Your open days, sessions, tasting price and how people get to you. |
| Shop and taps | Your products, sizes, ABVs, case prices, delivery terms and glass sizes. |
| Not negotiable | Standard drinks shown, the 18+ check, ID on delivery, drivers looked after, no appeal to minors, and the Motion switch. |



