Skip to content
heyrav design system
Foundations

Layout

Two containers, one gutter, three breakpoints. Browse at 1180, read at 1080.

Containers

TokenValueRoleStatus
--wrap1180pxHome page container.Shipped
--wrap-read1080pxCase-study container - a reading measure.Shipped
--gutter44pxPage side padding; 22px at 640.Shipped
--case-pad84pxVertical rhythm; 64px at 900.Shipped
--nav-h68pxThe fixed bar: 44px target + 12px padding top and bottom.Shipped
--target44pxMinimum touch target, everywhere.Shipped

Every inner section uses the same container as its page - a sub-section never narrows itself independently. Prose keeps its own measure (max-width:62ch) inside the container instead.

Breakpoints

WidthWhat changes
1180Evidence reel narrows its caption column.
900Type steps down one; two-column layouts stack; --case-pad 84 → 64.
640Type steps again; gutter 44 → 22; card grids go single-column; figure padding halves.
400The loader skips - the headline re-wraps and the drum cannot land on it.

Custom properties cannot be used in media queries, so breakpoints are documented values, not tokens.

Columns

1fr
1fr · gap 56
Show code
<div class="cols">
  <div class="d-box d-w-full">1fr</div>
  <div class="d-box d-w-full">1fr · gap 56</div>
</div>

.cols is the case-page split. The home page case row is 1fr 1.05fr with a 64px gap, flipping its visual to the left on alternate rows.

Stacking

TokenValueRoleStatus
--z-hero10Fixed hero copy.Spec
--z-sticky15Floating CTA.Spec
--z-pop20Popovers, glossary boxes, menus.Spec
--z-content25#content sliding over the hero.Spec
--z-nav30Fixed nav bar.Spec
--z-progress40Scroll comet.Spec
--z-overlay50Dialogs, drawers, lightbox.Spec
--z-veil60Loading veil.Spec
--z-toast70Toasts sit over everything.Spec