Icons
A mask-based icon set painted with
currentColor — zero external requests, including
layout & builder icons (align, flex, columns, sizing) and
app-chrome marks. Search by name; click any icon to copy its
markup.
Browse
The set ships as the optional
keel-icons.css
(~65 KB min) — link it after keel.css to use
.k-icon--<name>. Includes an opt-in set of
social brand marks (facebook, x, instagram, github, youtube,
…) for footers — with the honest caveat that brand marks date
(x was a bird once), so treat them as convenience, not canon.
keel-icons.css with only what you need.
Using an icon
An icon is a span with two classes — the base
.k-icon and a --name modifier. It
takes the surrounding text color and font-size, so it aligns
like a letter:
<p>Saved <span class="k-icon k-icon--check-circle"></span></p>
Decorative by default — add aria-hidden="true".
If an icon carries meaning on its own (an icon-only button),
give it role="img" and an aria-label,
or label the button instead.
Size & color
Both are inherited, so you style the parent, not the icon.
Here the same k-icon--star at three sizes and two
colors:
<span class="k-icon k-icon--star" style="font-size: 2rem; color: var(--k-accent)"></span>
Framing an icon
The glyphs are bare on purpose. To give one a background,
border, or shape — the "feature icon" look — wrap it in a
.k-icon-box. Every part is a modifier, and they
compose: shape (--circle, --soft,
--sharp), fill (--solid,
--outline, --ring, --flat),
size (--sm/--lg/--xl), and
color (--ok, --warn,
--danger, --secondary,
--neutral). The corners follow your
--k-radius, so it stays on-system.
<span class="k-icon-box k-icon-box--circle k-icon-box--solid">
<span class="k-icon k-icon--rocket" aria-hidden="true"></span>
</span>
<!-- outline + status color + large -->
<span class="k-icon-box k-icon-box--outline k-icon-box--ok k-icon-box--lg">
<span class="k-icon k-icon--check" aria-hidden="true"></span>
</span>
<!-- tune any one box with the knobs directly -->
<span class="k-icon-box" style="--k-icon-box-size: 4rem; --k-icon-box-bg: var(--k-accent-2-soft)">…</span>
In buttons
Icon buttons pair .k-btn--icon with an icon and
an aria-label; text buttons just put an icon before
the label. See Actions.
Bring your own
The .k-icon mechanism is in the core file — you
can point it at any SVG without the set. Set --k-icon
to a URL-encoded data: SVG (use black
as the fill/stroke; the mask ignores color and takes
currentColor):
.k-icon--my-mark {
--k-icon: url("data:image/svg+xml,%3Csvg …%3E");
}