ClassesLumos 0.0.1

Utilities

Every single-property class in the framework, with the value it sets. Utilities are the last layer in the cascade, so they always win.

A utility does one thing to one property. It sits in the last cascade layer, so it beats a component's own styles without needing !important or a more specific selector. It is the same job a combo class does in Webflow, without the risk of it being edited somewhere else and changing everything.

Reach for a utility for a one-off adjustment. When you find yourself repeating the same four utilities together, that combination wants to be a pattern or a component prop instead. This page is generated from utilities.css, so it is never out of date.

Flex

NameValueNotes
.flex-growflex: 1;Takes the free space in a flex row or column.
.flex-shrinkflex: 0 auto;Gives up space when the container runs short.
.flex-noshrinkflex: none;Keeps its size whatever happens around it.

Padding: all sides

NameValueNotes
.padding-0padding: 0;
.padding-1padding: var(--space-1);
.padding-2padding: var(--space-2);
.padding-3padding: var(--space-3);
.padding-4padding: var(--space-4);
.padding-5padding: var(--space-5);
.padding-6padding: var(--space-6);
.padding-7padding: var(--space-7);
.padding-8padding: var(--space-8);
.padding-sitemarginpadding: var(--site-margin);
.padding-gutterpadding: var(--site-gutter);
.padding-smallpadding: var(--section-space-small);
.padding-mediumpadding: var(--section-space-medium);
.padding-largepadding: var(--section-space-large);

Padding: block (top + bottom)

NameValueNotes
.padding-block-0padding-block: 0;
.padding-block-1padding-block: var(--space-1);
.padding-block-2padding-block: var(--space-2);
.padding-block-3padding-block: var(--space-3);
.padding-block-4padding-block: var(--space-4);
.padding-block-5padding-block: var(--space-5);
.padding-block-6padding-block: var(--space-6);
.padding-block-7padding-block: var(--space-7);
.padding-block-8padding-block: var(--space-8);
.padding-block-sitemarginpadding-block: var(--site-margin);
.padding-block-gutterpadding-block: var(--site-gutter);
.padding-block-smallpadding-block: var(--section-space-small);
.padding-block-mediumpadding-block: var(--section-space-medium);
.padding-block-largepadding-block: var(--section-space-large);

Padding: inline (left + right)

NameValueNotes
.padding-inline-0padding-inline: 0;
.padding-inline-1padding-inline: var(--space-1);
.padding-inline-2padding-inline: var(--space-2);
.padding-inline-3padding-inline: var(--space-3);
.padding-inline-4padding-inline: var(--space-4);
.padding-inline-5padding-inline: var(--space-5);
.padding-inline-6padding-inline: var(--space-6);
.padding-inline-7padding-inline: var(--space-7);
.padding-inline-8padding-inline: var(--space-8);
.padding-inline-sitemarginpadding-inline: var(--site-margin);
.padding-inline-gutterpadding-inline: var(--site-gutter);

Padding: top

NameValueNotes
.padding-top-0padding-top: 0;
.padding-top-1padding-top: var(--space-1);
.padding-top-2padding-top: var(--space-2);
.padding-top-3padding-top: var(--space-3);
.padding-top-4padding-top: var(--space-4);
.padding-top-5padding-top: var(--space-5);
.padding-top-6padding-top: var(--space-6);
.padding-top-7padding-top: var(--space-7);
.padding-top-8padding-top: var(--space-8);
.padding-top-sitemarginpadding-top: var(--site-margin);
.padding-top-gutterpadding-top: var(--site-gutter);
.padding-top-smallpadding-top: var(--section-space-small);
.padding-top-mediumpadding-top: var(--section-space-medium);
.padding-top-largepadding-top: var(--section-space-large);
.padding-top-navoverlappadding-top: var(--section-space-nav-overlap);

Padding: bottom

NameValueNotes
.padding-bottom-0padding-bottom: 0;
.padding-bottom-1padding-bottom: var(--space-1);
.padding-bottom-2padding-bottom: var(--space-2);
.padding-bottom-3padding-bottom: var(--space-3);
.padding-bottom-4padding-bottom: var(--space-4);
.padding-bottom-5padding-bottom: var(--space-5);
.padding-bottom-6padding-bottom: var(--space-6);
.padding-bottom-7padding-bottom: var(--space-7);
.padding-bottom-8padding-bottom: var(--space-8);
.padding-bottom-sitemarginpadding-bottom: var(--site-margin);
.padding-bottom-gutterpadding-bottom: var(--site-gutter);
.padding-bottom-smallpadding-bottom: var(--section-space-small);
.padding-bottom-mediumpadding-bottom: var(--section-space-medium);
.padding-bottom-largepadding-bottom: var(--section-space-large);
.padding-bottom-navoverlappadding-bottom: var(--section-space-nav-overlap);

Padding: left

NameValueNotes
.padding-left-0padding-left: 0;
.padding-left-1padding-left: var(--space-1);
.padding-left-2padding-left: var(--space-2);
.padding-left-3padding-left: var(--space-3);
.padding-left-4padding-left: var(--space-4);
.padding-left-5padding-left: var(--space-5);
.padding-left-6padding-left: var(--space-6);
.padding-left-7padding-left: var(--space-7);
.padding-left-8padding-left: var(--space-8);
.padding-left-sitemarginpadding-left: var(--site-margin);
.padding-left-gutterpadding-left: var(--site-gutter);

Padding: right

NameValueNotes
.padding-right-0padding-right: 0;
.padding-right-1padding-right: var(--space-1);
.padding-right-2padding-right: var(--space-2);
.padding-right-3padding-right: var(--space-3);
.padding-right-4padding-right: var(--space-4);
.padding-right-5padding-right: var(--space-5);
.padding-right-6padding-right: var(--space-6);
.padding-right-7padding-right: var(--space-7);
.padding-right-8padding-right: var(--space-8);
.padding-right-sitemarginpadding-right: var(--site-margin);
.padding-right-gutterpadding-right: var(--site-gutter);

Margin

NameValueNotes
.margin-top-automargin-top: auto;
.margin-top-0margin-top: 0;
.margin-top-1margin-top: var(--space-1);
.margin-top-2margin-top: var(--space-2);
.margin-top-3margin-top: var(--space-3);
.margin-top-4margin-top: var(--space-4);
.margin-top-5margin-top: var(--space-5);
.margin-top-6margin-top: var(--space-6);
.margin-top-7margin-top: var(--space-7);
.margin-top-8margin-top: var(--space-8);
.margin-top-guttermargin-top: var(--site-gutter);
.margin-top-textmargin-top: var(--_margin-top);
.margin-bottom-automargin-bottom: auto;
.margin-bottom-0margin-bottom: 0;
.margin-bottom-1margin-bottom: var(--space-1);
.margin-bottom-2margin-bottom: var(--space-2);
.margin-bottom-3margin-bottom: var(--space-3);
.margin-bottom-4margin-bottom: var(--space-4);
.margin-bottom-5margin-bottom: var(--space-5);
.margin-bottom-6margin-bottom: var(--space-6);
.margin-bottom-7margin-bottom: var(--space-7);
.margin-bottom-8margin-bottom: var(--space-8);
.margin-bottom-guttermargin-bottom: var(--site-gutter);
.margin-bottom-textmargin-bottom: var(--_margin-bottom);
.margin-block-automargin-block: auto;
.margin-block-0margin-block: 0;
.margin-block-1margin-block: var(--space-1);
.margin-block-2margin-block: var(--space-2);
.margin-block-3margin-block: var(--space-3);
.margin-block-4margin-block: var(--space-4);
.margin-block-5margin-block: var(--space-5);
.margin-block-6margin-block: var(--space-6);
.margin-block-7margin-block: var(--space-7);
.margin-block-8margin-block: var(--space-8);
.margin-block-guttermargin-block: var(--site-gutter);
.margin-block-textmargin-block: var(--_margin-top) var(--_margin-bottom);
.margin-inline-automargin-inline: auto;
.line-clamp-2line-clamp: 2; -webkit-line-clamp: 2;Truncates to two lines with an ellipsis.
.line-clamp-3line-clamp: 3; -webkit-line-clamp: 3;Truncates to three lines with an ellipsis.
.line-clamp-4line-clamp: 4; -webkit-line-clamp: 4;Truncates to four lines with an ellipsis.

Gap

NameValueNotes
.gap-inheritgrid-column-gap: inherit; grid-row-gap: inherit;Takes the gap of the layout it sits inside rather than setting its own.
.gap-0grid-column-gap: var(--_gap-size); grid-row-gap: var(--_gap-size); --_gap-size: 0rem;
.gap-1grid-column-gap: var(--_gap-size); grid-row-gap: var(--_gap-size); --_gap-size: var(--space-1);
.gap-2grid-column-gap: var(--_gap-size); grid-row-gap: var(--_gap-size); --_gap-size: var(--space-2);
.gap-3grid-column-gap: var(--_gap-size); grid-row-gap: var(--_gap-size); --_gap-size: var(--space-3);
.gap-4grid-column-gap: var(--_gap-size); grid-row-gap: var(--_gap-size); --_gap-size: var(--space-4);
.gap-5grid-column-gap: var(--_gap-size); grid-row-gap: var(--_gap-size); --_gap-size: var(--space-5);
.gap-6grid-column-gap: var(--_gap-size); grid-row-gap: var(--_gap-size); --_gap-size: var(--space-6);
.gap-7grid-column-gap: var(--_gap-size); grid-row-gap: var(--_gap-size); --_gap-size: var(--space-7);
.gap-8grid-column-gap: var(--_gap-size); grid-row-gap: var(--_gap-size); --_gap-size: var(--space-8);
.gap-guttergrid-column-gap: var(--_gap-size); grid-row-gap: var(--_gap-size); --_gap-size: var(--site-gutter);The site gutter, so the spacing matches the grid around it.
.gap-smallgrid-column-gap: var(--_gap-size); grid-row-gap: var(--_gap-size); --_gap-size: var(--section-space-small);
.gap-mediumgrid-column-gap: var(--_gap-size); grid-row-gap: var(--_gap-size); --_gap-size: var(--section-space-medium);
.gap-largegrid-column-gap: var(--_gap-size); grid-row-gap: var(--_gap-size); --_gap-size: var(--section-space-large);
.gap-row-inheritgrid-row-gap: inherit;
.gap-row-0grid-row-gap: 0rem;
.gap-row-1grid-row-gap: var(--space-1);
.gap-row-2grid-row-gap: var(--space-2);
.gap-row-3grid-row-gap: var(--space-3);
.gap-row-4grid-row-gap: var(--space-4);
.gap-row-5grid-row-gap: var(--space-5);
.gap-row-6grid-row-gap: var(--space-6);
.gap-row-7grid-row-gap: var(--space-7);
.gap-row-8grid-row-gap: var(--space-8);
.gap-row-guttergrid-row-gap: var(--site-gutter);

Align & justify

NameValueNotes
.alignment-start--_alignment: start; text-align: start;Sets the alignment custom property that patterns read, aligning the container's children to the start.
.alignment-center--_alignment: center; text-align: center;Same, centred.
.alignment-end--_alignment: end; text-align: end;Same, aligned to the end.
.align-self-inheritalign-self: inherit;
.align-self-startalign-self: flex-start;
.align-self-centeralign-self: center;
.align-self-endalign-self: flex-end;
.align-self-stretchalign-self: stretch;
.align-items-stretchalign-items: stretch;
.align-items-startalign-items: flex-start;
.align-items-centeralign-items: center;
.align-items-endalign-items: flex-end;
.align-items-inheritalign-items: inherit;
.justify-content-startjustify-content: flex-start;
.justify-content-centerjustify-content: center;
.justify-content-endjustify-content: flex-end;
.justify-content-betweenjustify-content: space-between;
.justify-content-aroundjustify-content: space-around;
.justify-content-inheritjustify-content: inherit;

Sizing

NameValueNotes
.width-fullwidth: 100%;
.width-autowidth: auto;
.min-width-automin-width: auto;Lets a flex or grid child shrink below its content size, which it refuses to do by default.
.height-fullheight: 100%;
.height-autoheight: auto;
.coverwidth: 100%; height: 100%;Fills its parent completely and sits behind everything else in it. Used for a background image or video.
.max-width-nonemax-width: none;Removes a max width inherited from a component.
.max-width-smallmax-width: var(--max-width-small);Caps the width at --max-width-small, the comfortable reading measure.
.max-width-fullmax-width: var(--max-width-full);
.min-height-screenmin-height: 100svh;At least the height of the viewport, using svh so mobile browser chrome does not cause a jump.

Aspect ratio & object fit

NameValueNotes
.ratio-autoaspect-ratio: auto;Lets the media set its own height. The page shifts when it loads, so prefer a fixed ratio above the fold.
.ratio-1-1aspect-ratio: 1;
.ratio-16-9aspect-ratio: 16 / 9;
.ratio-3-2aspect-ratio: 3 / 2;
.ratio-2-3aspect-ratio: 2 / 3;
.ratio-2-1aspect-ratio: 2;
.ratio-5-4aspect-ratio: 5 / 4;
.ratio-4-5aspect-ratio: 4 / 5;
.object-fit-coverobject-fit: cover;
.object-fit-containobject-fit: contain;

Typography

NameValueNotes
.line-height-smallline-height: var(--line-height-small);
.line-height-mediumline-height: var(--line-height-medium);
.line-height-largeline-height: var(--line-height-large);
.line-height-hugeline-height: var(--line-height-huge);
.letter-spacing-tightletter-spacing: var(--letter-spacing-tight);
.letter-spacing-normalletter-spacing: var(--letter-spacing-normal);
.weight-regularfont-family: var(--primary-family); font-weight: var(--primary-regular);
.weight-mediumfont-family: var(--primary-family); font-weight: var(--primary-medium);
.weight-boldfont-family: var(--primary-family); font-weight: var(--primary-bold);
.text-transform-nonetext-transform: none;
.text-transform-uppercasetext-transform: uppercase;
.text-transform-capitalizetext-transform: capitalize;
.text-transform-lowercasetext-transform: lowercase;
.text-wrap-defaulttext-wrap: wrap;
.text-wrap-balancetext-wrap: balance;
.text-wrap-prettytext-wrap: pretty;
.color-inheritcolor: inherit;Takes the color of whatever it sits inside rather than the theme default.
.color-fadedcolor: color-mix(in srgb, currentColor 70%, transparent);Drops the text to a muted version of the current color, for secondary copy.

Background & radius

NameValueNotes
.background-transparentbackground-color: transparent;Removes the surface color, letting the theme behind show through.
.background-1background-color: var(--background);
.background-2background-color: var(--background-2);
.background-skeletonbackground-color: var(--background-skeleton);The faint tint an image or video sits on while it loads, so the layout does not flash white.
.radius-noneborder-radius: 0;
.radius-inheritborder-radius: inherit;Takes the corner radius of its parent, so a child sitting inside a rounded card matches it.
.radius-smallborder-radius: var(--radius-small);
.radius-mainborder-radius: var(--radius-main);
.radius-roundborder-radius: var(--radius-round);Fully rounded ends, for pills and circular buttons.

Display

NameValueNotes
.display-blockdisplay: block;
.display-inlinedisplay: inline;
.display-inline-blockdisplay: inline-block;
.display-inline-flexdisplay: inline-flex;
.display-inline-griddisplay: inline-grid;
.display-nonedisplay: none;

Overflow

NameValueNotes
.overflow-visibleoverflow: visible;
.overflow-hiddenoverflow: hidden;
.overflow-clipoverflow: clip;
.overflow-x-autooverflow: auto clip;
.overflow-y-autooverflow: clip auto;
.overflow-hidden-leftclip-path: polygon(0 0, calc(100% + 100vw) 0, calc(100% + 100vw) 100%, 0% 100%);Clips overflow on the left only, for a row that scrolls out to one side.

Position & z-index

NameValueNotes
.position-staticposition: static;
.position-relativeposition: relative;
.position-absoluteposition: absolute;
.position-stickyposition: sticky; top: 0;
.position-fixedposition: fixed;
.zindex-negativez-index: -1; position: relative;
.zindex-0z-index: 0; position: relative;
.zindex-unsetz-index: unset; position: relative;
.zindex-1z-index: 1; position: relative;
.zindex-2z-index: 2; position: relative;
.zindex-3z-index: 3; position: relative;

Interaction & order

NameValueNotes
.pointer-onpointer-events: auto;Takes clicks back, for a child of something set to pointer-off.
.pointer-offpointer-events: none;Ignores the mouse entirely; clicks pass through to whatever is underneath.
.order-firstorder: -1;Moves to the start visually without moving in the markup. The reading order for assistive tech does not change, so only use it where the two still agree.
.order-lastorder: 1;Moves to the end visually without moving in the markup, with the same caveat.

Accessibility

NameValueNotes
.sr-onlywhite-space: nowrap; clip: rect(0, 0, 0, 0); border-width: 0;Visible to screen readers, invisible on screen. For labels and headings that the layout communicates visually but assistive tech cannot see.