Design system

01 Colors

Primary

1

Primary variant

1

Secondary

1

Secondary variant

1

Background

1

Surface

1

Error

1

02 Typography

Heading 1 - Serif - 150px

Arthur

Heading 2 - Serif - 100px

Kaamelott

Heading 3 - Serif - 56px

Merlin & Élias

Heading 4 - Serif - 32px

Perceval & Karadoc

Heading 5 - 28px - 4.75 Character Space

Yvain, chevalier au Lion ou l'orphelin de Carmélide

Subheading 1 - Serif - 28px

384,400 pintes de bière

Subheading 2 - Condensed Sans-serif - 14px - 2.35 Character Space

Gauvain, chevalier au Pancréas

Nav Text - Condensed Sans-serif - 16px - 2.7 Character Space

Kadoc

Body Text

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Phasellus hendrerit. Pellentesque aliquet nibh nec urna. In nisi neque, aliquet vel, dapibus id, mattis vel, nisi. Sed pretium, ligula sollicitudin laoreet viverra, tortor libero sodales leo, eget blandit nunc tortor eu nibh. Nullam mollis. Ut justo. Suspendisse potenti.Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Phasellus hendrerit. Pellentesque aliquet nibh nec urna. In nisi neque, aliquet vel, dapibus id, mattis vel, nisi. Sed pretium, ligula sollicitudin laoreet viverra, tortor libero sodales leo, eget blandit nunc tortor eu nibh. Nullam mollis. Ut justo. Suspendisse potenti.Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Phasellus hendrerit. Pellentesque aliquet nibh nec urna. In nisi neque, aliquet vel, dapibus id, mattis vel, nisi.

03 Interactive elements

Navigation

Accordion

Button

Variants

Sizes

Shapes

Links

With an href, a Button is a link that looks like a button, with every variant.

04 Row & Pane

Columns

One column
Two columns
1:1 by default
Three
equal
columns

Ratio

2:1 — the wide side
narrow side
1:2 — narrow side
the wide side

Gap

gap
small
gap
gap
medium
gap
gap
large
gap

Background

background="background"
Switches with the theme
background="surface"
Switches with the theme
background="primary"
Switches with the theme
background="secondary"
Switches with the theme

Width

width="full"
Spans the whole parent
width="contained"
Content stays within the site container

Pane alignment

align="start"
align="center"
align="end"
valign="start"
valign="center"
valign="end"
Mountains at dusk

center

Text sits in the middle of the taller image beside it, on both axes.

Stacking

A Row stacks to one column when the Row itself is narrower than 40rem, whatever the viewport.

Inside
a narrow
container

05 Image

Sources and credit

Mountains at dusk, local asset
© Kevin Verreault 2024
Snowfield, URL source
© Credit on a white photo
Mountains at dusk, no credit

Credit slot

Mountains at dusk, custom credit
© Kevin Verreault · Prints available

Ratio and fit

Mountains at dusk, 1:1 cover
© ratio="1:1"
Mountains at dusk, 3:2 cover
© ratio="3:2"
Mountains at dusk, 16:9 cover
© ratio="16:9"
Mountains at dusk, square cover
© fit="cover"
Mountains at dusk, square contain
© fit="contain"

06 Form controls

Every control wraps a native element, so submission and validation work without JavaScript. Tab through the fields to see the focus ring.

Sizes

An Input, a Select and a Button of the same size are the same height.

Label

Input

We only use it to answer you.

Enter a postal code such as H2X 1Y4.

Textarea

A few words about the print you want.

The message can't be empty.

Select

Pick a format.

A native select has no read-only state; use a read-only Input instead.

Checkbox

One email a month.

You must accept the terms.

Radio group

Standalone, with a legend
Print size

Framing is quoted separately.

Print size

Pick a print size.

Disabled
Horizontal

Switch

Checkbox semantics, toggle look.

Turn this on to continue.

Form field

A contact form built from FormFields. Submitting it empty shows the browser's own validation.

We only use it to answer you.

Print size

Errors from a script

FormField's error is set when the page renders. Validation in the browser calls setFieldError instead: leave this field with an invalid email, then fix it.

We only use it to answer you.

07 Card

Calendar 2025

A card that doesn't link can hold its own actions.

Only the body is given, so only the body renders.

08 Badge

primarysecondarymuteddangeroutline

Heron at dawn New Sold out

09 Avatar

Image

Kevin VerreaultKevin VerreaultKevin VerreaultRemote source

Initials fallback

Kevin Verreault (decorative avatar next to the name)

10 Separator

Decorative (role="none"), the default:

Semantic (role="separator"), when the division matters to screen-reader users:

Oiseaux
MammifèresPaysages

11 Table

Print sizes and prices
SizePaperEditionPrice
20 × 30 cmMatteOpen45 $
30 × 45 cmLustreOpen75 $
40 × 60 cmFine art25120 $
60 × 90 cmFine art10240 $
Striped and hover
SizePaperEditionPrice
20 × 30 cmMatteOpen45 $
30 × 45 cmLustreOpen75 $
40 × 60 cmFine art25120 $
60 × 90 cmFine art10240 $

12 Skeleton

14 Alert

Variants

Shipping

Prints ship within five business days.

Order received

A confirmation email is on its way.

Without icon or title

info and success use role="status"; warning and danger use role="alert".

15 Toast

One Toast region sits in the layout. Any script queues a message in it with toast(message, { variant, duration }).

16 Tabs

Without JavaScript every panel shows under its heading.

Small

20 × 30 cm, printed on matte paper.

Medium

40 × 60 cm, printed on fine-art paper.

Large

60 × 90 cm, mounted on aluminium.

18 Pagination

20 Dialog

A native modal dialog: Escape or a click outside closes it, and focus returns to the Button that opened it.

Order a print

Choose a size; framing is quoted separately.

Print size

Sizes

size="small"

A small dialog. Its width shrinks to fit narrow screens.

size="medium"

A medium dialog. Its width shrinks to fit narrow screens.

size="large"

A large dialog. Its width shrinks to fit narrow screens.

21 Alert dialog

Asks for an explicit choice: no close button, and a click outside doesn't close it. Escape cancels.

Delete this print?

It will be removed from your cart. This cannot be undone.

Publish this gallery?

Visitors will see it on the portfolio page.

Last choice: none

22 Sheet

side="left"

A dialog attached to one edge of the viewport.

Use it for a mobile menu or a cart panel.

side="right"

A dialog attached to one edge of the viewport.

Use it for a mobile menu or a cart panel.

side="top"

A dialog attached to one edge of the viewport.

Use it for a mobile menu or a cart panel.

side="bottom"

A dialog attached to one edge of the viewport.

Use it for a mobile menu or a cart panel.

24 Popover

A small panel anchored to its trigger. Escape or a click outside closes it.

26 Tooltip

Shows on hover and on keyboard focus, and describes its trigger. It sits above, or below when there is no room above.