Foundations Layout

Layout

The frame every block sits in: four mobile-first breakpoints, a centred content container, a constant gutter and a two-step section rhythm. Every value comes from the production site and points at an existing step on the 4px grid.

The responsive type rule: every text role uses its Small variant below tablet and its Large variant from tablet up — in Tailwind, type-h2-sm tablet:type-h2-lg. Blocks never pick their own breakpoint for type.

Breakpoints

Mobile-first: unprefixed utilities are mobile, each variant applies from its width up. Tailwind's stock sm:–2xl: are removed.
CSS variableValueTailwindWhat changes
— base0no prefixMobile: Small type roles, section-sm padding
--breakpoint-tablet768pxtablet:Type roles switch Small → Large
--breakpoint-laptop1024pxlaptop:Section rhythm steps up to section-lg
--breakpoint-desktop1360pxdesktop:Content container reaches its max width
--breakpoint-desktop-xl1920pxdesktop-xl:Page frame reaches its max width
CSS can't read a variable inside @media, so plain-CSS consumers write the px value (@media (min-width: 768px)). The --breakpoint-* variables in styles.css are there for reference and matchMedia().

Container, gutter & section rhythm

--space-gutter · 20px · inline page gutter at every width
--space-section-sm · 32px · section padding below laptop
--space-section-lg · 80px · section padding from laptop

Token reference

Layout tokens. The spacing steps are multiples of --spacing, so they rescale with the grid.
CSS variableValueTailwindResolves to
--container-content1360pxmax-w-contentThe centred content column
--container-page1920pxmax-w-pageOuter frame of full-bleed sections
--space-gutter20pxpx-gutter--space-5
--space-section-sm32pxpy-section-sm pt-section-sm pb-section-sm--space-8
--space-section-lg80pxpy-section-lg pt-section-lg pb-section-lg--space-20
--hero-height85svhh-heroHero block height; floor with min-h-112 tablet:min-h-128

The block frame

Every full-width block starts from the same shell: mx-auto w-full max-w-content px-gutter py-section-sm laptop:py-section-lg. The gutter sits inside the container, so the text column is at most 1320px and never touches the viewport edge. See Blocks.