Foundations
Layout engine
Zones register themselves with their layout host, so a rail, a header and a main region agree on insets, sticky edges and widths without a single magic number. The grid on top of them is plain CSS — column counts and gutters come from breakpoints, not from script.
Zones
A m-layout is a host; every zone inside it declares what it is and where it belongs. order breaks ties for the corners, sticky pins a zone to the viewport, and a size token lets a zone change its own width — the grid follows.
<m-layout>The host. Collects its zones and writes one grid stylesheet during SSR.
full-height<m-layout-header>Top zone. Owns the block-start inset every sticky zone measures from.
order<m-layout-aside>Side zone, multi-instance. Position is logical, so it mirrors in RTL.
position · sticky · order · size-token<m-layout-main>The content region. Takes whatever the other zones left.
order<m-layout-footer>Bottom zone. Pinned or flowing, same registration contract.
order<template>
<m-layout full-height>
<m-layout-aside
position="start"
sticky
:order="0"
>
<m-navigation-rail :items="items" />
</m-layout-aside>
<m-layout-header :order="1">
<m-app-bar type="small">Docs</m-app-bar>
</m-layout-header>
<m-layout-main :order="2">
<slot />
</m-layout-main>
</m-layout>
</template>Grid
m-container is a 4 / 8 / 12-column grid, m-row is a subgrid row and m-col spans columns relative to the active breakpoint — a span of 2 is half of a 4-column phone and a sixth of a 12-column desktop.
Resize the window — the same markup re-flows without a media query of your own.
<m-container>
<m-row align="start">
<m-col :cols="4" :tablet-xs="4" :desktop-xs="8">
Main column
</m-col>
<m-col :cols="4" :tablet-xs="4" :desktop-xs="4">
Sidebar
</m-col>
</m-row>
</m-container>Breakpoints
Declared once in nuxt.config.ts and injected into Sass as $material-kit-breakpoints, so component styles and grid props always agree.
mobile-xs320px4 columnsmobile600px4 columnstablet-xs905px8 columnstablet1240px12 columnsdesktop-xs1440px12 columnsdesktop1920px12 columnsWireframes
Nine full app shells assembled from these zones — Spotify, Gmail, Discord, a nested console and simpler baselines. Content is skeletons on purpose: only the structure reads.
Wireframe galleryOpen a shell, resize it, steal the markup.