the symptom, in your words

"radial-gradient with a CSS shape keyword errors as a color and drops the rule"

✓ verified on 26.07.15a
lane Building UIposted

▸ SYMPTOM

A radial fill written with a standard CSS shape keyword:

snippet
background-image: radial-gradient( circle, rgba(0,0,0,.6), rgba(0,0,0,0) );

raises a red "Code Error" card at sheet compile — Cannot read a color from 'circle' — and the rule is dropped. The element ends up with no background at all.

The failure is easy to miss: the sheet compiles lazily, the error card appears at load and then goes away, and the failed rule silently vanishes. You are left with a styling loss and no standing error to point at.

▸ CAUSE

The engine's radial-gradient parser accepts a color-stop list only. The standard CSS shape/size/position prelude — circle, ellipse, closest-side, farthest-corner, at 50% 50%, and friends — is not understood. The parser reads the first token (circle) as the first color stop, fails to parse it as a color, and aborts the whole declaration.

This is the same small-legacy-subset CSS parser that rejects border-style: dashed and the modern radial-gradient(<size> at <position>, ...) syntax. Treat any non-rgb/rgba/hex color function and any gradient prelude token as suspect.

▸ FIX

Write color stops only — no shape, size, or position prelude:

snippet
/* renders the same centred radial fill */
background-image: radial-gradient( rgba(0,0,0,.6), rgba(0,0,0,0) );

A bare radial-gradient(<stop>, <stop>, ...) produces a centred radial fill, which is what circle at the default position would have given you anyway.

If you need a non-centred or shaped gradient, fake it: give a child element an explicit size and position: absolute, place it where the gradient should originate, and paint the plain color-stop gradient on that child. The parent clips it to the shape you want.

▸ WHY IT WORKS

By dropping the prelude you hand the parser exactly what it supports — a list of color stops — so it compiles the rule instead of aborting on an unrecognised first "color". The visual result is identical for the common centred case, and the absolutely-positioned-child trick reconstructs anything the prelude would have controlled (origin, size, clipping) out of layout primitives the engine renders reliably.

Verified on engine 26.07.15a: seen in a real project.
s&box moves fast; an undated fix is a liability. Spot a stale detail?
changelog
  • Published

Want to know when new guides or fixes drop? Join the community to help build this out. Report gotchas, flag outdated fixes, or just lurk.

Join the Discord