INDEX / 04
Utilities
62 classes, shipped in css/main.css, for arranging and styling light-DOM markup: a 12-track grid, the gap scale, the type ramp and two visibility helpers. Every row below is read at build time from the stylesheet that emits it, declarations included.
Use these on page markup and on children you are spanning inside a grid. Arranging sibling COMPONENTS is <al-layout>’s job, not a wrapper of your own — which is also why .al-u-grid__item is not scoped under .al-u-grid in the source: the container may be a layout’s shadow root, where no.al-u-grid ancestor exists in the light DOM to match.
BREAKPOINTS — 6THE @SUFFIX ON EVERY GRID CLASS
@xsmin-width: 320px
@smmin-width: 480px
@mdmin-width: 768px
@lgmin-width: 1024px
@xlmin-width: 1260px
@xxlmin-width: 1440px
GRID — 12 TRACKS7 ALIGNMENT CLASSES
CLASSDECLARES
.al-u-grid--align-centeralign-items: center
.al-u-grid--align-endalign-items: flex-end
.al-u-grid--align-stretchalign-items: stretch
.al-u-grid--justify-centerjustify-content: center
.al-u-grid--justify-endjustify-content: flex-end
.al-u-grid--justify-space-betweenjustify-content: space-between
.al-u-flex-direction-rowflex-direction: row
GRID — GENERATED CLASSESN = 1…12 · @xs @sm @md @lg @xl @xxl
Four families, each emitted once bare and once inside every breakpoint, socol:8@md is a real class and so iscol:8. Breakpoints stack: the widest matching one wins.
PATTERNWHAT IT DOESEMITS
cols:NImplicit uniform columns: every child takes N of the 12 tracks, so `cols:6` is two-up. No per-item class, and no row wrapper element.on the grid containergrid-template-columns
col:NExplicit span, declared on the item that spans it.on .al-u-grid__itemgrid-column: span N
row:NThe same, vertically — a cell that is taller than one row.on .al-u-grid__itemgrid-row: span N
offset:NStart the item in track N, leaving the tracks before it empty.on .al-u-grid__itemgrid-column-start: N
Implicit columns
Uniform columns declare themselves on the container. Unlike float or flexbox grid libraries there is no wrapper element around each column.
<div class="al-u-grid cols:6@md cols:3@lg al-u-gap-lg">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
</div>
Explicit columns
Columns that are not uniform declare their own span, on the element that spans it.
<div class="al-u-grid al-u-gap-lg">
<div class="al-u-grid__item col:6 col:8@md">1</div>
<div class="al-u-grid__item col:6 col:4@md">2</div>
</div>
Explicit rows
The same idea vertically — a cell that occupies two rows, with no row wrapper anywhere.
<div class="al-u-grid">
<div class="al-u-grid__item col:8@md">1</div>
<div class="al-u-grid__item col:4@md row:2@md">2</div>
<div class="al-u-grid__item col:8@md">3</div>
</div>
Offset columns
offset:N starts an item in track N, leaving the tracks before it empty.
<div class="al-u-grid">
<div class="al-u-grid__item col:7@md offset:2@md">1</div>
<div class="al-u-grid__item col:3@md">2</div>
</div>
Every span, one grid
Multiple rows come from filling 12 tracks, not from a row wrapper per row. All12 spans, in one container:
1
1
1
1
1
1
1
1
1
1
1
1
2
2
2
2
2
2
3
3
3
3
4
4
4
6
6
12
SPACING — 12 GAP CLASSESSET ON THE PARENT
A gap class makes its element a flex column and spaces the children. The value column below is resolved through the same token layer Foundations reads, so it is what this brand actually renders — not what the SCSS literally says.
CLASSTOKENVALUE
.al-u-gap--al-theme-space16px
.al-u-gap-xxxs--al-theme-space-xxxs2px
.al-u-gap-xxs--al-theme-space-xxs4px
.al-u-gap-xs--al-theme-space-xs8px
.al-u-gap-sm--al-theme-space-sm12px
.al-u-gap-md--al-theme-space-md20px
.al-u-gap-lg--al-theme-space-lg24px
.al-u-gap-xl--al-theme-space-xl28px
.al-u-gap-xxl--al-theme-space-xxl32px
.al-u-gap-xxxl--al-theme-space-xxxl36px
.al-u-gap-super--al-theme-space-super64px
.al-u-gap-none00
.al-u-gap--rowmodifier — combine with any size abovealign-items: center; flex-direction: row
<!-- The gap classes go on the PARENT. They set
display:flex and a column direction as well as
the gap, so a bare wrapper needs nothing else. -->
<div class="al-u-gap-lg">
<div>Item</div>
<div>Item</div>
</div>
<!-- ...and al-u-gap--row turns the same stack sideways. -->
<div class="al-u-gap-sm al-u-gap--row">
<div>Item</div>
<div>Item</div>
</div>TYPOGRAPHY — 40 CLASSES20 ROLE · 20 LITERAL
Two tiers, and the difference matters. A tier-2 class names a ROLE, which a brand, a density or a contrast setting is allowed to repoint; a tier-1 class pins a literal step of the ramp and follows nothing. Prefer tier 2 unless you have a reason not to.
TIER 2 — ROLESPECIMENRESOLVES TO
.al-u-theme-typography-body-xsDesign at southleft400 0.75rem/1.25rem Public Sans, sans-serif
.al-u-theme-typography-body-xs-boldDesign at southleft700 0.75rem/1.25rem Public Sans, sans-serif
.al-u-theme-typography-body-smDesign at southleft400 0.875rem/1.25rem Public Sans, sans-serif
.al-u-theme-typography-body-sm-boldDesign at southleft700 0.875rem/1.25rem Public Sans, sans-serif
.al-u-theme-typography-body-mdDesign at southleft400 1rem/1.5rem Public Sans, sans-serif
.al-u-theme-typography-body-md-boldDesign at southleft700 1rem/1.5rem Public Sans, sans-serif
.al-u-theme-typography-body-lgDesign at southleft400 1.25rem/1.75rem Public Sans, sans-serif
.al-u-theme-typography-body-lg-boldDesign at southleft700 1.25rem/1.75rem Public Sans, sans-serif
.al-u-theme-typography-heading-smDesign at southleft400 1.25rem/1.75rem Public Sans, sans-serif
.al-u-theme-typography-heading-sm-boldDesign at southleft700 1.25rem/1.75rem Public Sans, sans-serif
.al-u-theme-typography-heading-mdDesign at southleft400 1.5rem/2rem Public Sans, sans-serif
.al-u-theme-typography-heading-md-boldDesign at southleft700 1.5rem/2rem Public Sans, sans-serif
.al-u-theme-typography-heading-lgDesign at southleft400 1.75rem/2.25rem Public Sans, sans-serif
.al-u-theme-typography-heading-lg-boldDesign at southleft700 1.75rem/2.25rem Public Sans, sans-serif
.al-u-theme-typography-display-smDesign at southleft400 2rem/2.5rem Public Sans, sans-serif
.al-u-theme-typography-display-sm-boldDesign at southleft700 2rem/2.5rem Public Sans, sans-serif
.al-u-theme-typography-display-mdDesign at southleft400 2.25rem/2.75rem Public Sans, sans-serif
.al-u-theme-typography-display-md-boldDesign at southleft700 2.25rem/2.75rem Public Sans, sans-serif
.al-u-theme-typography-display-lgDesign at southleft400 3rem/3.25rem Public Sans, sans-serif
.al-u-theme-typography-display-lg-boldDesign at southleft700 3rem/3.25rem Public Sans, sans-serif
TIER 1 — LITERALSPECIMENRESOLVES TO
.al-typography-preset-body-xsDesign at southleft400 0.75rem/1.25rem Public Sans, sans-serif
.al-typography-preset-body-xs-boldDesign at southleft700 0.75rem/1.25rem Public Sans, sans-serif
.al-typography-preset-body-smDesign at southleft400 0.875rem/1.25rem Public Sans, sans-serif
.al-typography-preset-body-sm-boldDesign at southleft700 0.875rem/1.25rem Public Sans, sans-serif
.al-typography-preset-body-mdDesign at southleft400 1rem/1.5rem Public Sans, sans-serif
.al-typography-preset-body-md-boldDesign at southleft700 1rem/1.5rem Public Sans, sans-serif
.al-typography-preset-body-lgDesign at southleft400 1.25rem/1.75rem Public Sans, sans-serif
.al-typography-preset-body-lg-boldDesign at southleft700 1.25rem/1.75rem Public Sans, sans-serif
.al-typography-preset-heading-smDesign at southleft400 1.25rem/1.75rem Public Sans, sans-serif
.al-typography-preset-heading-sm-boldDesign at southleft700 1.25rem/1.75rem Public Sans, sans-serif
.al-typography-preset-heading-mdDesign at southleft400 1.5rem/2rem Public Sans, sans-serif
.al-typography-preset-heading-md-boldDesign at southleft700 1.5rem/2rem Public Sans, sans-serif
.al-typography-preset-heading-lgDesign at southleft400 1.75rem/2.25rem Public Sans, sans-serif
.al-typography-preset-heading-lg-boldDesign at southleft700 1.75rem/2.25rem Public Sans, sans-serif
.al-typography-preset-display-smDesign at southleft400 2rem/2.5rem Public Sans, sans-serif
.al-typography-preset-display-sm-boldDesign at southleft700 2rem/2.5rem Public Sans, sans-serif
.al-typography-preset-display-mdDesign at southleft400 2.25rem/2.75rem Public Sans, sans-serif
.al-typography-preset-display-md-boldDesign at southleft700 2.25rem/2.75rem Public Sans, sans-serif
.al-typography-preset-display-lgDesign at southleft400 3rem/3.25rem Public Sans, sans-serif
.al-typography-preset-display-lg-boldDesign at southleft700 3rem/3.25rem Public Sans, sans-serif
VISIBILITY — 2NO SUBSTITUTE FOR SEMANTICS
CLASSDECLARES
.al-u-is-vishiddenborder: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1pxvia the al-visually-hidden mixin
.al-u-is-overflow-hiddenoverflow: hidden
.al-u-is-vishidden keeps content in the accessibility tree while removing it visually — it is for labels a screen reader needs and a sighted reader does not, never for content you simply want gone. Use hidden for that.