star Primitive · v2
Icon
Font Awesome Pro Sharp, inlined as SVG at build time — no sprite to fetch, no icon font, no runtime library. Only the glyphs a page actually references ship with it, so an icon cannot arrive late, flash, or fail. 53 names, 30 of them with a true duotone pass.
— The weight is semantic
regular
A resting control. The default, and what most of the interface wears all the time.
solid
Active or current: the open panel, the running playback, the page you are on. Survives night mode, where every tone collapses to the same red, and colour blindness, where a hue change says nothing.
duotone
Identity — this is a galaxy. Reserved for things in the sky and the measures that double as them. Both layers inherit currentColor, so one declaration tints the whole mark.
— Fallback
resolveIcon(name, weight) falls back to solid when a name has no duotone pass,
rather than throwing. A duotone request for a chevron renders a chevron instead of a hole in
the interface. Those names are marked fallback below.
— Things in the sky 14
The only group that regularly wants duotone: these name what a thing is, and identity is the weight that says so.
galaxy nebula cluster planet moon sun comet meteor satellite eclipse conjunction asterism constellation — How you would look at it 3
Naked eye, binoculars, telescope — the equipment bar an observing note is really answering.
eye binoculars telescope — Interface 16
Controls and affordances. No duotone: a chevron is not a kind of thing, and tinting half of it would only add noise.
search layers close chevron-down chevron-up chevron-right chevron-left help info warn idea external arrow-right play pause checklist — Observing instruments and measures 15
Quantities and conditions. Duotone where the glyph doubles as an object in the sky — the Moon, the horizon, the clock on a transit row.
location clock calendar sunset sunrise compass camera bortle ruler horizon altitude crosshairs centre target bell — Destinations 5
The six places the nav can send you. Regular when you are elsewhere, solid for the page you are on.
home guides challenge archive learn — Sizes
Sizes are rungs of the type scale, not a pixel grid: an icon is height: 1em with
its font-size set by the rung, so it rides the text it sits beside and scales with density.
2xs xs sm md lg xl 2xl When to use
Reach for a name in this registry before inventing a glyph. If an object has a kind, do
not hand-place its icon at all — use <TypePill>, which reads both the
glyph and the tone out of skyTypes.ts so the sky and the interface cannot
disagree.
Adding one
Import the three weights in src/design/icons/registry.ts and add one entry to
ICONS. duotone is optional and should stay that way for anything
that is not a thing in the sky. Placement in the file decides which section it lands in on
this page.