Guides
Using colour
Palettes, assignments, gradients and patterns — all of it from your own tokens.
Every colour comes from your design system. There is no picker, no hex field, and no way to end up with a colour that is nearly but not quite one of yours.
What a fill is
Fill asks one question — what is this filled with — and offers five answers:
| Solid | a colour from your palette |
| Gradient | linear, radial or conic, with as many stops as you like |
| Pattern | stripes or checks, drawn from your palette |
| Image | a picture, with its framing |
| Video | a video behind the content |
A dot marks the one the element is actually filled with, so the row says what the fill is as well as what you are looking at.
There is no Shader, and there will not be one: CSS has no equivalent short of a Houdini paint worklet, which only Chromium implements. A control that produced something two browsers ignore would break the one promise this app makes.
Pattern is a repeating gradient, not a picture — so it is made of your tokens, it costs nothing to download, and it changes when the palette changes. Stripes take an angle; both take two colours and a band size.
Where you set it
A colour is set where the thing it colours is set.
| the fill | Fill › Colour |
| the words | Typography › Colour, with the size and the weight |
| the stroke | Style & depth › Stroke colour, with its width and style |
| a gradient’s stops | in the gradient’s own controls |
It used to be one palette at the top of the rail with Fill / Text / Stroke tabs on it. That is a tidy idea and it put the stroke’s colour three panels away from its width, which is one thing in two places — and it put pictures and video inside something called Colour.
Each is a colour field: a swatch and the token’s name, which opens the whole picker when you click it. Nothing was lost in the move; the field carries all four tiers.
None removes it. Removing a stroke colour removes the stroke it created, and setting one creates a stroke to colour.
Where the colours come from
Inside any colour field:
Palette — your design system’s colours and their shades, plus white and black. This is what you reach for most.
A picture or a video instead of a colour is Fill › Media — a stroke or a run of text cannot take one. See Adding images.
Assignments — the semantic roles your system defines: the heading colour, the body background, the call-to-action colour. Reach for these when one fits. An element painted with the heading colour follows the theme when the theme changes; one painted with primary, two steps darker has a colour hardcoded into it and will not.
Transparency — the same colours at every step of opacity, for tints and washes.
Status — error, warning, success, info. These mean something specific, and they belong in a message rather than in a hero. They are kept apart so the colours you reach for are only the ones that are yours to design with.
Cutting through
Numbers knocked out of a bar so the photograph behind shows through them — what a drawing application calls Subtract.
CSS has no boolean operation, and the thing that makes the same picture is a blend. Cut out — on the hover bar, and under Appearance:
| Solid | leave it filled, no hole |
| Light bar | a white bar, text cut out of it — for a dark picture behind |
| Dark bar | a black bar, text cut out of it — for a light picture behind |
Select the words or select the bar — either works. The blend has to go on the bar, because that is the surface the words punch through, but “colour this black and cut it out” is how the effect is thought about and it is the words that are selected when you think it. Choosing it from a child says Cut out of Box, and puts it where it belongs.
The black and white are not a colour choice and cannot be one. They are the operands of an arithmetic: screen keeps white and lets black through, so a white bar stays a bar and black glyphs become holes. A dark grey bar does not knock out, it goes murky. The app writes both, and says so.
It cuts out everything inside the bar, because that is what a blend does. Numbers cut out but a label beside them left alone means the label needs its own box.
It also puts isolation: isolate on the section. Without it the blend reaches
past the section to the page, and the same bar on the same photograph looks
different depending on what happens to be underneath — which is the kind of
thing you find out much later, by moving something.
Patterns
Fill › Pattern: stripes, checks, dots and a grid, drawn from your palette rather than from a file. In CSS a pattern is a repeating gradient, which means it is the same machinery as a gradient — tokens and all — rather than an image somebody has to make and ship.
Dots and a grid have a mark of their own inside the tile, so how big that mark is is separate from how far apart they are. Stripes and checks do not: their mark is the spacing.
For a pattern made from a drawing of your own, that is the artboard’s — see Drawing graphics.
Gradients
Fill › Gradient, on anything. A gradient is a fill — the natural background of a section or a box — not a trick played with a pseudo-element.
Shape is Linear, Radial or Conic. Direction is the eight arrows; radial and conic also ask where they start from.
Stops are a list, and each one is a token with an optional position. Add as many as you like; two is the fewest a gradient can be made of. Leave a position blank to space them evenly.
Applies to
One word, three mechanisms — you say where it goes and the app writes whichever CSS that needs:
| Fill | background-image. A box, a section, a layer |
| Text | background-image + background-clip: text, and the words’ own colour set to transparent — which is how this is done |
| Stroke | border-image |
Two of those have a cost, and the panel says so rather than letting you find it:
A gradient border squares the corners. border-image ignores
border-radius, always, and no setting brings it back. That is CSS, not this
app.
Gradient text has no graceful fallback. The words are painted with the
background and their own colour is transparent, so anywhere background-clip
fails they are invisible. It is supported everywhere now and written prefixed as
well, but it is worth knowing what it is.
Over a picture
Put the gradient on a layer rather than on the element — open the layer, then Fill › Gradient. The panel is already pointed at it, so it is the same control doing the same thing to a different target, and the gradient lies over the element’s own picture instead of replacing it. See Element layers.
By hand, on the canvas
With Fill › Gradient open, the gradient’s own handles appear on the element: a line, a diamond at each end, and a round handle for every stop in between.
Drag an end to set the direction. The line pivots about the other end, the way dragging one end of a line does everywhere else, and Shift snaps it to eighths of a turn.
Drag a stop to move it along the line. Dragging one past another reorders them, and the reorder happens when you let go rather than under your hand.
What is worth knowing is what the drag is saying, because CSS has less freedom
here than a drawing application does. A linear-gradient takes an angle, and its
line always runs through the centre of the box — you cannot put the two ends
wherever you like. But the gesture still maps exactly: where you drop an end is
recorded as where that stop sits along the line. Drag across the middle third
of a box and what you have said is “first stop at 33%, last at 66%”, which CSS
holds precisely.
So dragging an end does two things at once, and both are the same information.
With the tool
Pick the Gradient tool (G) and drag across the element. That is the whole
gesture: picking the tool opens Fill › Gradient so you can see what the drag
did, and dragging on something selects it on the way past — no click first.
Where you start and finish the drag become where the first and last stops sit, the same bargain the handles make.
By hand: drag across a box. The direction of your drag is the direction of the gradient, snapping to eighths of a turn — an eighth is a decision and 37 degrees is a mistake.
The stops: with the gradient tool active, the Fill / Text / Stroke tabs become From and To. Pick which end you are setting, then click a colour on any tab. Fade to nothing makes that end transparent, which is what turns a gradient into an overlay rather than a covering.
Two per element. A gradient goes on a layer rather than on the element itself, which means it lies over a background image instead of replacing it, and the element’s own fill stays free. Upper and Lower in the tool panel choose which you are editing, and which sits in front. A dot marks a layer already in use.
Those are the same two layers the Element layers panel offers, so a gradient you draw here can be given a radius, an opacity or a size afterwards — and adding one to a layer you have already styled keeps what was there. See Element layers.
A gradient stop can be a colour of your own
Every stop offers the palette first, and a Custom tab beside it with the full picker — hue, saturation, lightness, opacity and the exact hex.
This is the one place in the app where a free colour is not treated as debt. Everywhere else a value that is not on the scale will not move when the scale is remapped, and that is worth knowing about. A gradient’s middle is not that: it exists to get from one token to another, it has no meaning of its own to name, and a design system that had to declare every intermediate would be one nobody could read.
The palette is still what opens first, because a token is still the right answer most of the time — Custom is one tab away rather than in front of every choice.