.ly-root supplies shared structural tokens, shrink safety, the named ly-scope inline-size container, and height-aware defaults. Reset and public tokens live in layout-style-css/foundation.css.
Every primitive applies min-inline-size: 0 and min-block-size: 0 where tracks or children need to shrink.
Wrappers are optional local responsive scopes:
.ly-wrapper--compact.ly-wrapper--prose.ly-wrapper--content.ly-wrapper--workspace.ly-wrapper--wide.ly-wrapper--full.ly-wrapper--breakout
Breakout children select clamped lanes with data-ly-lane="content", data-ly-lane="feature", or data-ly-lane="full".
--ly-page-padding-inline supplies the default --ly-wrapper-gutter value. --ly-wrapper-gutter controls rendered Wrapper padding at the scope where it is overridden, while the Wrapper applies safe-area compensation once at its outer edge.
Use content for conventional page content and workspace for task-oriented application layouts that need the 96rem measure.
.ly-stackcreates vertical flow..ly-clusterwraps inline groups..ly-centercenters a bounded composition..ly-coverfills available block size while preserving reachable normal flow.
.ly-switcherwraps when its intrinsic threshold is no longer feasible..ly-sidebarkeeps a preferred rail while the content can meet its minimum..ly-griduses auto-fit tracks and--ly-grid-min..ly-mosaicuses one column by default, six columns at42rem, and twelve columns at72rem; span and row-span utilities activate only at supported tiers..ly-splitcreates balanced intrinsic regions..ly-panescreates a preferred workspace rail and flexible pane..ly-mediawraps media and content without a viewport breakpoint..ly-action-barwraps start/end workflow groups in DOM order;.ly-action-bar--stickyuses height-aware sticky behavior and safe-area padding.
.ly-framekeeps a configurable aspect ratio..ly-reelis the deliberate horizontal-flow primitive..ly-scrollowns horizontal and vertical overflow without imposing a height cap..ly-scroll--boundedapplies the stable--ly-scroll-maxcap..ly-scroll--viewportapplies the height-aware--ly-scroll-viewport-maxcap.
In normal use, only .ly-reel and .ly-scroll introduce intentional horizontal scrolling, and only .ly-scroll and its modifiers introduce intentional vertical scrolling. Other wrappers, primitives, and recipes clamp to their available inline size.
Mosaic never uses grid-auto-flow: dense; visual spans do not change reading or focus order. Action Bar groups also wrap without visual reordering.
Page, cover, and viewport-relative Scroll behaviors use vh fallbacks followed by dynamic viewport units such as 100dvh. Bounded Scroll remains application-controlled across viewport tiers.
At 44rem viewport height or less, gaps and scroll maxima tighten. At 30rem or less, forced cover/shell minimums and recipe-owned sticky positioning are removed. Required regions remain in normal document flow.
--ly-section-padding-block controls normal .ly-section spacing. --ly-section-padding-block-compact controls .ly-section--compact independently and remains smaller than the normal value across regular, short, and shallow viewport heights.
Advanced consumers can override stable custom properties for:
- gaps and spacing
- wrapper measures and gutters
- sidebar, pane, media, reel, and grid minimums
- frame ratios
- shell, cover, and bounded-scroll sizing
These tokens tune behavior without creating a second breakpoint system.
.ly-gap-0 through .ly-gap-9 set gap only on the element carrying the class. Nested primitives keep their own default gaps. For an intentionally inherited spacing context, set --ly-gap, --ly-grid-gap, --ly-stack-gap, or --ly-cluster-gap on the shared ancestor instead.