From surface
The composition lens for a frontend build — where hierarchy, grid, measure, and spatial rhythm are decided, and where "looks amateur" and "won't scale to real data" are determined. Use after the build works (seaworthy) and after or alongside canon's design-language gates, when establishing or auditing the compositional structure of a surface. The one shift: hierarchy and the grid are DECISIONS, not accidents — the page is *composed* (alignment, measure, spatial rhythm), the empty/loading/edge states have a designed visual form, and the surface is built for reality's long tail (overflow, missing data, huge numbers, RTL). The agent stacks boxes that "work" and leaves composition, empty-states, and the long tail to chance — so composition must be decided and gated. CSS mechanism (how Grid/Flexbox/positioning work) stays in surface:keel; this skill owns the composition *judgment* — which grid, which hierarchy, what density, how the long tail holds. Triggers on "layout / grid / composition / hierarchy", "measure / line length / reading column", "spacing / rhythm / density / proximity", "empty state / blank slate / no results", "loading state / skeleton / placeholder", "form layout / label / input / validation visual", "overflow / truncation / long text / huge numbers", "RTL / right-to-left / direction / i18n layout", "state machine / hover / focus / active / disabled", "real data / edge case / long tail / production-proof layout".
How this skill is triggered — by the user, by Claude, or both
Slash command
/surface:layout [the UI / page / component layout to compose and harden][the UI / page / component layout to compose and harden]This skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
<!--
!checklist init ${CLAUDE_SKILL_DIR} --force
An atelier is a craftsman's working studio — the space where decisions about form, proportion,
and composition happen before the piece leaves the bench. layout is the composition lens of the
atelier suite: where the other skills decide what it looks like (color, type, form, motion),
layout decides how it is organized — the grid, the hierarchy, the reading measure, the spatial
rhythm, and the shape of every application-layer state. Its product is a composed surface: an
explicit armature, a quantified spacing system, and an application layer that holds its form when
reality provides the actual data. It runs across gated stages and will not advance past a GATE
until the checklist tool clears it — order enforced, substance yours.
The governing fact: hierarchy and the grid are decisions, not defaults — and the agent makes neither. The agent places elements in a container, sizes them to fit, and calls it done. It does not ask "what does the eye see first?", does not establish a grid before placing elements, does not consider what happens when a name is sixty characters long or when a table cell contains null. What reads as "amateur layout" is almost always the absence of three things: a decided visual hierarchy (everything at the same weight reads as noise), a consistent spatial system (ad-hoc gaps of 13px, 22px, 7px — the eye detects rhythmic incoherence before the mind names it), and a designed application layer (empty states that are blank divs, error states that are unstyled text, forms where the label disappears when you start typing). These are not polish — they are the substance. A layout without a composed hierarchy is not a draft of a good layout; it is a different artifact.
The boundary with surface:keel: keel owns the CSS mechanism — how Grid and Flexbox distribute space, the cascade, the box model, positioning contexts. layout owns the composition judgment — which grid, which hierarchy model, what density register, how the long tail holds. The questions answered here are design questions that require taste; the questions answered in keel are engineering questions that require correctness. Bring a layout decision here; bring a CSS bug to keel. Cross-reference keel for the mechanism when a stage sends you there for implementation.
This is where the agent era bites:
padding: 13px, margin-top: 22px, gap: 7px — each value chosen by eye, none derived from a system. The result is rhythmic incoherence that the eye reads as "off" without the viewer knowing why. All spatial values must come from the spacing scale.Read references/grid-and-hierarchy.md first — the armature without which the rest of the stages have no foundation. The grid is not a stylesheet detail; it is the governing constraint for all placement decisions. Load at the start, re-check at every gate.
Speak the user's language. The decisions are the user's — which column count, which density, which hierarchy model, how much whitespace, what the long tail looks like for their data. Read their fluency and gloss a term on first use (visual hierarchy, focal order, optical center, measure / line-length, spacing scale / base unit, proximity / grouping law, spacing gradient, application-layer state, skeleton screen, subgrid, intrinsic sizing, logical properties / RTL). A grid system the user can't read is a structure imposed, not shared.
The depth lives in references/. Open each when a stage sends you there — not all upfront.
clamp(), logical properties for direction-agnostic spacing, dense-layout spacing tiers.overflow-wrap, ellipsis, multi-line clamp), numeric edge cases (large numbers, tabular-nums, zero/null/negative/float display), grid overflow trap (minmax(0, 1fr) / min-width: 0), scrollbar-gutter, 100dvh vs 100vh on mobile, RTL with logical properties and mirrored icons, text expansion for translated content, image and media containers (aspect-ratio, object-fit, CLS), third-party failure resilience, reflow at 320px/400% zoom (WCAG 1.4.10), the long-tail diagnostic checklist.The arc is one composed surface. Three stages — grid · rhythm · reality — turn a working-but-uncomposed layout into a surface that guides the eye, breathes consistently, and holds its form when real data arrives. Grid commits the armature and hierarchy; rhythm fixes the measure and spatial cadence; reality designs the application layer and stress-tests the long tail.
layoutgates all three; it runs afterseaworthy(the build is correct) and its composed structure is what thecolor,type,form, andmotionlenses later paint and whatbulwarkkeeps from drifting at 1→N.
Greenfield or retrofit? Decide the entry, not a new stage. Most real work is an existing layout with ad-hoc spacing, no explicit grid, and states that were never designed. The three stages are the same; the entry differs. For a retrofit: do one inventory pass first — find every magic px gap, every missing state, every place text overflows or a number is truncated. That inventory is raw material for the gates (the scatter of ad-hoc gaps becomes the spacing scale the rhythm stage commits; the missing states become the state machine the reality stage designs). Bring the inventory to STAGE 0 and the gates run unchanged. The composition judgment — what the grid should be, what the hierarchy should say — stays a gate the user clears.
Open references/grid-and-hierarchy.md. Commit the armature before placing any element.
repeat(auto-fit, minmax(min(100%, Xrem), 1fr))) for content grids that should adapt without breakpoints. Use subgrid where nested content must align across cards or rows with varying content length. Use gap — never child margin — for item spacing.margin-inline, padding-block, inset-inline-start) throughout so alignment is direction-agnostic from the start.checklist check grid grid-and-armature-committedchecklist check grid visual-hierarchy-and-focal-order-decidedchecklist check grid alignment-discipline-enforcedchecklist verify gridOpen references/measure-and-rhythm.md. Fix the measure and rhythm before the application layer, because the spacing system is what the application-layer states inherit.
max-width in ch units (~65ch). Never let prose fill the full container on a wide viewport — the agent's default produces 120-character lines. Establish a content-well pattern for layouts that mix full-bleed and reading-column sections.em (self-scaling); layout spacing in rem (user font-size respecting); reading column in ch (typeface-coupled); fluid spacing in clamp() (breathes between viewport sizes without media-query steps). All-px layouts fail WCAG 1.4.10 reflow.checklist check rhythm measure-and-reading-column-setchecklist check rhythm spacing-scale-applied-consistentlychecklist verify rhythmOpen references/application-states-and-form-visuals.md and references/designing-for-the-long-tail.md. Design every state, then stress-test with real-data extremes.
overflow-wrap: break-word globally; intentional truncation gets a tooltip. Numeric extremes: largest plausible values fit; tabular-nums on all numeric columns. Grid overflow: minmax(0, 1fr) or min-width: 0 on children. Mobile: 100dvh not 100vh. RTL: logical properties throughout; directional icons mirror. Translated text: layout holds at 150% English length. WCAG 1.4.10: no horizontal scroll at 320px / 400% zoom.checklist check reality application-layer-states-designedchecklist check reality form-visuals-and-state-coverage-completechecklist check reality long-tail-and-overflow-handledchecklist verify realitychecklist show — confirm all three stages passed.checklist done — clear this run's state.layout is the suite's compositional conscience — the place where the claim that hierarchy is a decision finally gets a gate. It runs after seaworthy has built the four states and their correctness; its composed structure is what the color, type, form, and motion lenses later paint (the color, the type scale, the depth model, the motion language all make more sense on a composed surface than on an ad-hoc stack of boxes). The through-line is the suite's own — push correctness into structure — applied to space: a gap derived from a scale can't drift the way a hand-picked 13px can, and an empty state designed as a state machine holds its form the way a blank div never can. The line that keeps layout honest: the reference library holds the encodable technique (how the RAM grid works, how proximity is quantified, how logical properties flip for RTL, what the line-box trap is); the composition judgment — which grid, which hierarchy, what density, how the long tail is designed — stays a gate the user clears. Blur that line and the skill becomes a recipe to follow; hold it and it stays a lens to see through.
padding: 13px, margin-top: 22px, gap: 7px — each chosen by eye, none derived from a scale. The rhythmic incoherence registers as "off" before the viewer names it. Every spatial value must come from the committed spacing scale.px only — does not scale with user font-size; fails WCAG 1.4.10 reflow at 400% zoom. Use rem for layout, em for component internals, ch for measure.margin-left: 16px does not mirror in RTL. Logical properties (margin-inline-start) must be used from the start; retrofitting them is expensive.100vh on mobile — overflows on iOS Safari due to browser chrome. Use 100dvh.min-width: auto — a long word or wide image inside a 1fr column blows out the grid. Use minmax(0, 1fr) or min-width: 0 on children.npx claudepluginhub iamk77/skill --plugin atelierProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Searches MemPalace before answering questions about past work, people, projects, or prior decisions. Returns verbatim stored content instead of guessing from model memory.